2016-07-07 11 views
2
arbeiten

Lassen Sie uns sagen, ich habe dies:Express.js> Router-Middleware> vorbei Variable req.foo über Umleitung nicht

a) 2 Strecken mit 1 Middleware-Funktion jeder und eine Callback-Funktion:

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

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

b) 2 Middleware-Funktion Ausdrücke

fooCtrl = function(req, res, next) 
{ 
    req.foo = 'foo'; 

    next(); 
}; 

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

    next(); 
}; 

Wie Sie sehen können, in dem fooCtrl ich eine Variable req.foo Einstellung - und in diesem Rahmen ist gesetzt als ... aber ich bin nicht in der Lage diese Variable nennen im barCtrl-scop e.

Wird das req-Objekt nicht als Referenz übergeben?

Irgendwelche Vorschläge oder Best Practices?

Der Zweck ist, ein Token nach der Anmeldung vom Login-Controller zu einem Admin-Controller übergeben .. so etwas.

Antwort

2

Das ist das erwartete Verhalten. req Objekt wird für jede neue Anforderung neu erstellt, und Ihre Weiterleitung, d. H. res.redirect('/bar'), führt zu einer neuen Anforderung.

Lösung: Sie können ein Paket z. connect-flash, die Variablen in einem temporären Sitzungsobjekt speichert, das nur einmal verwendet werden kann. Sie müssen die erforderlichen Werte in Ihren Flash-Objekten vor dem Umleiten festlegen. Nach der Umleitung können Sie die gespeicherten Werte vom Flash-Objekt selbst abrufen.

+0

ok thx. das war die erwartete Antwort ;-D - Ich dachte, es müsste so sein, aber ich konnte keine Bestätigung finden. Danke für deine Erklärung. /// das ist großartig, ich benutze bereits connect-flash - war mir nicht sicher, ob es eine gute Übung ist, es für so etwas zu verwenden (keine Nachrichten). also nochmal, großes thx :-) – sasha

+0

@sasha Danke :) –