ExpressJS>路由器中间件>通过重定向传递变量req.foo不起作用

时间:2016-07-07 16:09:53

标签: javascript node.js express router middleware

我们说我有这个:

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对象吗?

有任何建议或最佳做法吗?

这样做的目的是在从登录控制器登录到管理控制器之后传递令牌......就像那样。

1 个答案:

答案 0 :(得分:2)

这是预期的行为。为每个新请求重新创建req个对象,您的重定向即res.redirect('/bar')会产生新请求。

<强>解决方案: 您可以使用某些包,例如connect-flash,它将变量存储在临时会话对象中,该对象只能使用一次。您需要在重定向之前在Flash对象中设置所需的值。然后在重定向之后,您将能够从flash对象本身获取保存的值。