gpt4 book ai didi

node.js - 我可以通过 express next() 函数发送数据吗?

转载 作者:IT老高 更新时间:2023-10-28 23:09:34 26 4
gpt4 key购买 nike

我正在开发一个需要使用 express 进行认证过程和 session 管理的 web 应用程序。我已经完成了后端 session 的事情。现在我想在 UI 上显示已登录的用户。privateContent 是一个验证某人是否已登录的函数,如下所示:

...
app.get( '/authRequired', queries.privateContent , routes.tasks );
...

这里是 queries.privateContent:

...
exports.privateContent = function ( req, res, next ) {
if ( req.session.user ) {
var username = req.session.user.username;
User.findOne( { 'username': username }, function ( err, obj ) {
if ( true ) {
next();
} else {
res.redirect('/');
}
});
} else {
res.redirect('/');
}
};
...

我想知道的是:我可以发送这样的数据吗? :

...
next( username );
...

如果是这样,我如何在 routes.tasks 渲染时检索它,如果发生如下情况(我试图在下面的代码中获取数据,但它不起作用。):

...
exports.my_tasks = function ( req, res, data ) {
console.log(data);
res.render('tasks/tasks',
{ title: 'Paraíso', controller: 'MyTasksController', user: data });
};
...

你可以猜到,我的意图是通过下一个登录到路由模块的当前用户,所以我可以使用 Jade 在 UI 中打印用户名。谢谢您的帮助。 :)

最佳答案

在这种情况下,您有几个选项(只使用其中一个!):

  1. 您可以从 my_tasks 路由访问 req.session.user.username 变量
  2. 您可以使用res.locals
  3. 您可以向 req 对象添加数据

在您的exports.privateContent 函数中,一旦在数据库中找到用户,您只需将该数据添加到res.locals:

User.findOne( { 'username': username }, function ( err, obj ) {
if ( true ) {
// this variable will be available directly by the view
res.locals.user = obj;

// this will be added to the request object
req.user = obj;

next();
} else {
res.redirect('/');
}
});

然后在您的 exports.my_tasks 路由中,res.locals.user 将是中间件中的任何 obj。然后,您可以简单地在 View 中作为变量 user 访问它。

因此,您可以通过以下方式访问路径中的数据:

exports.my_tasks = function ( req, res ) {
res.render('tasks/tasks', {
userFromReq: req.user, // this exists because you added in the middleware
userFromSession: req.session.user, // this was already in the session, so you can access
userFromRes: [DO NOT NEED TO DO THIS] // because res.locals are sent straight to the view (Jade).
});
};

关于node.js - 我可以通过 express next() 函数发送数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com