2016-07-07 5 views
2

のは、私はこれを持っているとしましょう動作していないルータのミドルウェア:ExpressJS>>リダイレクトを介して可変req.fooを渡す

A)1つのミドルウェア機能、各コールバック関数で2つの路線:

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のe。

reqオブジェクトは参照渡しではありませんか?

提案やベストプラクティスはありますか?

これは、ログイン後にトークンをlogin-controllerからadmin-controllerに渡すことを目的としています。

答えて

2

これは予想される動作です。新しいリクエストごとにreqオブジェクトが新たに作成され、リダイレクト、つまりres.redirect('/bar')が新しいリクエストになります。

ソリューション:あなたは、例えば、いくつかのパッケージを使用することができ connect-flashは、変数を一時セッションオブジェクトに格納します。一時オブジェクトは一度だけ使用できます。リダイレクトする前に、フラッシュオブジェクトに必要な値を設定する必要があります。その後、リダイレクト後、フラッシュオブジェクト自体から保存された値を取得することができます。

+0

ok thx。それは期待された答えでした;-D - 私はそれがそうでなければならないと思ったが、確認を見つけることができませんでした。あなたの説明のためにthx。 /// thats great、私はすでにconnect-flashを使用しています - それをsthのように使用するのは良い習慣であるかどうかは分かりませんでした(メッセージなし)。だから、再び、大きなthx :-) – sasha

+0

@サシャありがとう:) –

関連する問題