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后,您将能够从闪存对象本身获取保存的值。