我们说我有这个:
a)每个中间件功能为1的2条路由和一个回调函数:
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 - 并且在这个范围内它被设置为...但是我无法在barCtrl中调用这个变量 - 范围。
不是通过引用传递的req对象吗?
有任何建议或最佳做法吗?
这样做的目的是在从登录控制器登录到管理控制器之后传递令牌......就像那样。
答案 0 :(得分:2)
这是预期的行为。为每个新请求重新创建req
个对象,您的重定向即res.redirect('/bar')
会产生新请求。
<强>解决方案:强>
您可以使用某些包,例如connect-flash
,它将变量存储在临时会话对象中,该对象只能使用一次。您需要在重定向之前在Flash对象中设置所需的值。然后在重定向之后,您将能够从flash对象本身获取保存的值。