node新人求问express
发布于 9 年前 作者 ShiLiuShu 3310 次浏览 最后一次编辑是 8 年前 来自 问答

楼主node新人,刚开始接触使用的express框架。 碰到以下代码部分有些疑惑:

Issue.find({username:username},function(err,docs){ if(err){ next(err); }else{ req.issues=docs; next();

}

});

req.issues=docs;这句是将issue的查询结果存在req.issues中,那么请问在req这个对象中,issues属性是一直保存的么,还是下一次请求就清空了?就比如说, 在别的路由中能用接着使用req.issues.name查询或者做其他操作么? 谢谢。

3 回复

如果你知道Express或者Node各种框架的原理的话, 这个问题就很简单了.

Express中, 请求来了后, 请求会一层一层传遍所有的中间件, 直到中间件遍历完或者返回Response或者错误处理.

还是下一次请求就清空了?

这个问得有点不着边际, 如果问的是:下一个中间件里是否还保留着req.issues. 答案是是的. 你确实可以在设置req.issues这个中间件之后的所有中间件中取得req.issues,

别的路由中能用接着使用req.issues.name查询或者做其他操作么

但是如果是下一个请求的话, 每个请求是独立的互不影响的. 所以下一个请求 匹配到不同的router里, 没有相关查询和设置req的话 是取不到req.issues的

当然如果你想把数据一直保存在内存中不用每次都读取数据库的话, 就要考虑新的数据可持续方案比如redis

@Kaijun 有点明白了,我再去看看相关原理和源码,谢谢您的耐心解答!万分感谢!

回到顶部