老师, 之前的课程中定义了redis的get和set方法,但是并没有使用,我们通过写 ctx.session 的方式,依然实现了 redis 信息的写入,比如下面这些
// /josn测试路由
router.get('/json', async (ctx, next) => {
const session = ctx.session
if (session.viewNum == null) {
session.viewNum = 0
}
session.viewNum++
// throw new Error()
ctx.body = {
// title: 'koa2 json'
viewNum: session.viewNum
}
})
/**
* 登录
* @param {Object} ctx koa ctx
* @param {string} userName 用户名
* @param {string} password 密码
*/
async function login(ctx, userName, password) {
// 登录成功 ctx.session.userinfo = xx
const userInfo = await getUserInfo(userName, doCrypto(password))
if (!userInfo) {
// 登录失败
return new ErrorModel(loginFailInfo)
}
// 登录成功
if (ctx.session.userInfo == null) {
ctx.session.userInfo = userInfo
}
return new SuccessModel()
}
上面的这个逻辑里面, 我们并没有显式的调用 redis 的set方法, 但是redis里面的确有session信息,
是不是由于我们注册了 koa-generic-session 中间件,当我们操作 ctx.session 的时候,中间件会自动的去同步redis信息?(基础课程里面这个同步需要我们手动的去执行)