2016-07-07 73 views
2

傳遞變量req.foo比方說,我有這樣的:ExpressJS>路由器中間件>通過重定向不工作

一)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-scop中即

是不是通過引用傳遞的req對象?

任何建議或最佳實踐?

這樣做的目的是從登錄控制器登錄後將令牌傳遞給管理員控制器..類似的東西。

回答

2

這是預期的行爲。 req爲每個新請求重新創建對象,並且您的重定向即res.redirect('/bar')會生成新請求。

解決方案: 您可以使用一些軟件包,例如connect-flash它將變量存儲在一個只能使用一次的臨時會話對象中。您需要在重定向之前在Flash對象中設置所需的值。然後重定向後,您將能夠從閃存對象本身獲取保存的值。

+0

ok thx。這是預期的答案; - 我認爲它一定是這樣的,但是沒有找到確認。 thx爲您解釋。 ///那真是太棒了,我已經使用了連接閃光 - 不確定是否將它用於某種事物(非消息)是一種很好的做法。所以再次,大thx :-) – sasha

+0

@sasha謝謝:) –