nodeclub源码问题
发布于 9 年前 作者 xiaohuame 3870 次浏览 最后一次编辑是 8 年前 来自 问答

untitled1.png在看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 懂了,多谢。

回到顶部