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

ExpressJS > router middleware > passing variable req.foo via redirect not working

假设我有这个:

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)
{
    req.foo = 'foo';

    next();
};

barCtrl = function(req, res, next)
{
    console.log(req.foo); // output is 'undefined'

    next();
};

如您所见,我在 fooCtrl 中设置了一个变量 req.foo - 在此范围内,它设置为...但我无法在 barCtrl 中调用此变量-范围。

req对象不是传引用吗?

有什么建议或最佳做法吗?

这样做的目的是在登录后将令牌从登录控制器传递到管理控制器……类似的东西。

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

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