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 对象本身获取保存的值。
假设我有这个:
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 对象本身获取保存的值。