ExpressJS>路由器中间件>通过redirect传递variablesreq.foo不工作

比方说,我有这个:

a)每条路由具有1个中间件函数和一个callback函数:

router.post('/foo', fooCtrl, function(req, res) { res.redirect('/bar'); }); router.get('/bar', barCtrl, function(req, res) { res.end('finished'); }); 

b)2个中间件函数expression式

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

正如你所看到的,在fooCtrl中我设置了一个variablesreq.foo – 在这个范围内它被设置为…但是我不能在barCtrl范围内调用这个variables。

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

任何build议或最佳做法?

这样做的目的是从login控制器login后,将令牌传递给pipe理员控制器..类似的东西。

这是预期的行为。 req对象是为每个新请求重新创build的,并且您的redirect即res.redirect('/bar')产生一个新的请求。

解决scheme:您可以使用一些软件包,例如connect-flash ,它将variables存储在临时会话对象中,只能使用一次。 您需要在redirect之前在Flash对象中设置所需的值。 然后redirect后,您将能够从闪存对象本身获取保存的值。