Javascript ExpressJS>;路由器中间件>;通过重定向传递变量req.foo无效
假设我有这个: a) 2条路由,每个路由具有1个中间件函数和一个回调函数:Javascript ExpressJS>;路由器中间件>;通过重定向传递变量req.foo无效,javascript,node.js,express,router,middleware,Javascript,Node.js,Express,Router,Middleware,假设我有这个: a) 2条路由,每个路由具有1个中间件函数和一个回调函数: router.post('/foo', fooCtrl, function(req, res) { res.redirect('/bar'); }); router.get('/bar', barCtrl, function(req, res) { res.end('finished'); }); b) 2中间件函数表达式 fooCtrl = function(req, res, next) {
router.post('/foo', fooCtrl, function(req, res)
{
res.redirect('/bar');
});
router.get('/bar', barCtrl, function(req, res)
{
res.end('finished');
});
b) 2中间件函数表达式
fooCtrl = function(req, res, next)
{
req.foo = 'foo';
next();
};
barCtrl = function(req, res, next)
{
console.log(req.foo); // output is 'undefined'
next();
};
如您所见,在fooCtrl中,我设置了一个变量req.foo-在这个范围内,它设置为than。。。但我无法在barCtrl范围内调用此变量
req对象不是通过引用传递的吗
有什么建议或最佳实践吗
其目的是在登录后将令牌从登录控制器传递给管理员控制器。。类似的事情。这是预期的行为
req
对象将为每个新请求重新创建,您的重定向即res.redirect('/bar')
将产生一个新请求
解决方案:
您可以使用一些软件包,例如
connectflash
,它将变量存储在临时会话对象中,并且只能使用一次。在重定向之前,需要在flash对象中设置所需的值。重定向后,您将能够从flash对象本身获取保存的值。ok thx。这是预期的答案-我想一定是那样的,但找不到一个证实。谢谢你的解释那太好了,我已经使用了连接闪存-不确定使用它来做这样的事情是否是一种好的做法(没有消息)。同样,大thx:-)