如何将来自Connect中间件的variables传递给app.get-action?

我想创build一个之前的filter ,这使我可以使当前用户在所有行动中可用。 followint方法运作良好,我甚至不需要声明一个全局variables:

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, }); }); 

但是我仍然不确定是否可以操作req因为我不知道是不是改变了我不属于我的东西是正确的? 有一个更好的方法吗?

使用会话或用户对象来扩展req是一种常见的方法

例如看这些例子:

请继续前进,并要求物业要求! 当我刚开始使用Node.js和JavaScript的时候,我也觉得很奇怪(主要来自C ++的背景)。 然而,由于JavaScript的原型对象模型,这是非常自然的。 当你熟悉它之后,你会意识到你可以用简洁的代码来做强大的事情。

我是Passport的开发者(由上一位评论者提及)。 如果您打算开发可跨应用程序重用的中间件,那么我的build议是注意如何命名要添加到reqres的属性,以避免与同一应用程序中的其他中间件发生任何潜在冲突。

例如,Passport将user设置为req.user ,但是提供了一个选项来改变它(例如,应用程序可以将其设置为req.currentUser )。 内部私有variables附加​​到req._passport属性。