Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExpressJS>;路由器中间件>;通过重定向传递变量req.foo无效_Javascript_Node.js_Express_Router_Middleware - Fatal编程技术网

Javascript ExpressJS>;路由器中间件>;通过重定向传递变量req.foo无效

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) {

假设我有这个:

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-在这个范围内,它设置为than。。。但我无法在barCtrl范围内调用此变量

req对象不是通过引用传递的吗

有什么建议或最佳实践吗


其目的是在登录后将令牌从登录控制器传递给管理员控制器。。类似的事情。

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

解决方案:
您可以使用一些软件包,例如
connectflash
,它将变量存储在临时会话对象中,并且只能使用一次。在重定向之前,需要在flash对象中设置所需的值。重定向后,您将能够从flash对象本身获取保存的值。

ok thx。这是预期的答案-我想一定是那样的,但找不到一个证实。谢谢你的解释那太好了,我已经使用了连接闪存-不确定使用它来做这样的事情是否是一种好的做法(没有消息)。同样,大thx:-)