Node.js 如何从Connect';传递变量;将中间件导入app.get-action?

Node.js 如何从Connect';传递变量;将中间件导入app.get-action?,node.js,express,middleware,Node.js,Express,Middleware,我想创建一种before过滤器,它允许我在所有操作中使用当前用户。followint方法运行良好,我甚至不需要声明全局变量: app.use(函数(请求、恢复、下一步){ if(请求会话用户id){ /*从数据库中获取用户 并在变量中共享它 可以从房间访问的。。。 */ 查找({/*…*/},函数(err,users){ if(users.length==1){ req.current_user=用户[0]; } next(); }); } 否则{ next(); } }); app.get('

我想创建一种before过滤器,它允许我在所有操作中使用当前用户。followint方法运行良好,我甚至不需要声明全局变量:

app.use(函数(请求、恢复、下一步){
if(请求会话用户id){
/*从数据库中获取用户
并在变量中共享它
可以从房间访问的。。。
*/
查找({/*…*/},函数(err,users){
if(users.length==1){
req.current_user=用户[0];
}
next();
});
}
否则{
next();
}
});
app.get('/',函数(req,res){
//…在这里!!
控制台日志(请求当前用户);
res.render('索引'{
当前用户:请求当前用户,
});
});

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

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

例如,请参见以下示例:

  • Passport,一个流行的身份验证库

  • 连接cookie会话的中间件


继续,将属性添加到
req
!当我第一次用NoDE.js和JavaScript开头时,我觉得这很奇怪(来自C++的主要背景)。然而,考虑到JavaScript的原型对象模型,这是很自然的。在您熟悉它之后,您将意识到您可以用简洁的代码做一些强大的事情

我是(前面的评论中提到的)的开发者。如果您计划开发可跨应用程序重用的中间件,我的建议是注意如何命名添加到
req
res
的属性,以避免与同一应用程序中的其他中间件发生任何潜在冲突


例如,Passport将
用户设置为
req.user
,但提供了一个更改选项(例如,应用程序可以说将其设置为
req.currentUser
)。内部、私有变量附加到
req.\u passport

属性。

只有我和我的队友需要使用它,因此在这种情况下,在两个不同的上下文中意外使用相同的属性名称的可能性不大。但不管怎样,您的提示使名称可更改是非常有用的。谢谢你的回复!