YMM*_*MMD 13 middleware node.js express
我想创建一种前置过滤器,它允许我在所有操作中使当前用户可用.followint方法运行良好,我甚至不需要声明一个全局变量:
app.use(function(req, res, next){
if(req.session.user_id){
/* Get user from database
and share it in a variable
that can be accessed frooom ...
*/
User.find({ /* ... */ }, function(err, users){
if(users.length == 1){
req.current_user = users[0];
}
next();
});
}
else{
next();
}
});
app.get('/', function(req, res){
// ... here!!
console.log(req.current_user);
res.render('index', {
current_user: req.current_user,
});
});
Run Code Online (Sandbox Code Playgroud)
但是我仍然不确定是否可以操纵,req因为我不知道改变一些不属于我的东西是否正确?有一个更好的方法吗?
Jar*_*son 21
继续前进,坚持属性req!当我第一次开始使用Node.js和JavaScript时,这对我来说也很奇怪(来自主要的C++背景).然而,鉴于JavaScript的原型对象模型,这是很自然的.在你熟悉它之后,你会发现你可以用简洁的代码做强大的事情.
我是Passport的开发者(前一位评论者提到).如果您计划开发可以跨应用程序重用的中间件,我的建议是关注您如何命名您添加的属性,req或res避免与同一应用程序中的其他中间件发生任何潜在冲突.
例如,Passport设置userat req.user,但是提供了一个更改它的选项(例如,应用程序可以说将其设置req.currentUser为.).内部私有变量附加到req._passport属性.
这是使用会话或用户对象扩展req的常用方法
例如,请参阅以下示例:
Passport,一个流行的身份验证库https://github.com/jaredhanson/passport/blob/master/lib/passport/strategies/session.js
连接中间件进行cookie会话https://github.com/senchalabs/connect/blob/master/lib/middleware/cookieSession.js
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |