nodeclub源码问题
在看cnode官网的源码的时候发现了这么一段代码
if (req.session.user) {
ep.emit('get_user', req.session.user);
} else {
}
每次发现session里面有user时又重新生成一个对象,这是个什么逻辑
ep.all('get_user', function (user) {
if (!user) {
return next();
}
user = res.locals.current_user = req.session.user = new UserModel(user);
}
请各位不吝赐教
10 回复
之所以要套一层 UserModel,是因为 redis 里面取出来的 req.session.user 只是 plain object,所以要把它封装成 mongoose 的对象,才能调用一些附加的属性和方法。
@alsotang 多谢,但是封装完成后下一次还会继续封装吗?看代码的感觉是每次请求都会进行封装。
@alsotang 我之前还在想如何将session.user 这个plain object 如何转为 mongoose对象,后来特意用 UserModel.findOne 搜索返回一个 mongoose 对象。 看到 alsotang 大大这用法才焕然大悟。
@xiaohuame 对,每次都要封装。因为每次请求都是从 redis session 里面取出来
@alsotang 多谢你的解答。
@alsotang 突然又想到了一个问题,就是每次请求都新生成一个对象,那岂不是内存要爆了?这个问题有必要解决吗
@xiaohuame 。。。。。。。。新生成的对象会被回收啊
@alsotang 懂了,多谢。