0
点赞
收藏
分享

微信扫一扫

redis/session/jest

程序员漫画编程 2022-05-02 阅读 56

1、redis

1、 redis是内存数据库(mysql是硬盘数据库)
2、下载、安装、使用:
(1)官网下载即可;
(2)启动redis-server、redis-cli连接
3、 nodejs操作redis

/**
 * @description 存储配置
 * @author zrf
 */

let REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
};

module.exports = {
    REDIS_CONF
}
/**
 * @description 连接redis的方法 get set
 */

const redis = require('redis');
const { REDIS_CONF } = require('../conf/db');

// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host);
redisClient.on('error', err => {
    console.error(err);
})

/**
 * 
 * @param {string} key 键
 * @param {string} val 值
 * @param {number} timeout 过期时间,单位s
 */
function set(key, val, timeout = 60 * 60) {
    if (typeof val === 'object') {
        val = JSON.stringify(val);
    }
    redisClient.set(key, val);
    redisClient.expire(key, timeout);
}

/**
 * 
 * @param {string} key 
 */
function get(key) {
    const promise = new Promise((resolve, reject) => {
        redisClient.get(key, (err, val) => {
            if (err) {
                reject(err);
                return;
            }
            if (val == null) {
                resolve(null);
                return;
            }
            try {
                resolve(JSON.parse(val));
            } catch (ex) {
                resolve(val);
            }
        })
    })
    return promise;
}

module.exports = {
    set,
    get
}

2、登录(cookie和session)

1、为何session使用用redis存储?
(1)session访问频繁,对性能要求极高
(2)session可不考虑断电丢失数据的问题
(3)session数据量不会太大(相比于mysql中存储的数据)

2、为何网站数据不适合用redis?
(1)操作频率不是太高(相比于session操作)
(2)断电不能丢失,必须保留
(3)数据量太大,内存成本太高

3、koa2配置session

// session配置
app.keys = ['UIsdf_7878#s'];
app.use(session({
  key: 'weibo_sid',  // cookie name
  prefix: 'weibo:sess:', // redis key的前缀
  cookie: {
    path: '/',
    httpOnly: true,
    maxAge: 24 * 60 * 60 * 1000  // 单位ms
  },
  store: redisStore({
    all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
  })
}))

4、jest——单元测试

1、单元测试及其意义
(1)单个功能或接口,给定输入,得到输出。看输出是否符合要求;
(2)需手动编写用例代码,然后统一执行;
(3)意义:能一次性执行所有单测,短时间内验证所有功能是否正常;

2、使用jest
(1)*.test.js文件
(2)常用的断言

/**
 * @description test demo
 */

function sum(a, b) {
    return a + b;
}

test('test demo 1', () => {
    const res = sum(10, 20);
    expect(res).toBe(30);
})

(3)测试http接口

/**
 * @description jest server
 */

const request = require('supertest');
const server = require('../src/app').callback();

module.exports = request(server);

/**
 * @description json test
 */

const server = require("./server")

test('json 接口返回数据格式正确', async () => {
    const res = await server.get('/json');
    expect(res.body).toEqual({
        title: 'koa2 json'
    })
})
举报

相关推荐

0 条评论