Die übergabe-Variablen an die nächste middleware unter Verwendung von next() in Express.js
Gut, meine Frage ist, ich möchte einige Variablen aus der ersten middleware zu anderen middleware -, und ich habe versucht zu tun, aber es war "req.somevariable
ist gegeben als 'nicht definiert'".
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
////middleware2
...
some conditions
...
variable = req.somevariable;
...
- Sollte funktionieren. Es sei denn, es ist ein Tippfehler in der Frage, die Sie wahrscheinlich scheitern, weil Sie den Wert zuzuweisen, um
res
im middleware1 und versuchen, es ausreq
im middleware2. - Thankz @AndreasHultgren
Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.locals
Du musst angemeldet sein, um einen Kommentar abzugeben.
Befestigen Sie die variable mit der
req
Objekt, nichtres
.Statt
Haben:
Wie andere haben darauf hingewiesen,
res.locals
ist die empfohlene Art und Weise der Weitergabe der Daten durch die middleware.res.locals
, nichtreq.res.locals
.res.locals.myVar
ist der Weg zu gehen.Dies ist, was die res.die einheimischen Objekt ist für. Festlegen von Variablen, die direkt auf das request-Objekt wird nicht unterstützt oder dokumentiert. res.die einheimischen ist garantiert, um den Zustand mit der Lebensdauer einer Anfrage.
res.die einheimischen
Abrufen der Variablen in die nächste middleware:
req
- Objekt expressjs.com/en/guide/writing-middleware.html. Sehen Sie sich den AbschnittMiddleware function requestTime
res.locals
so vielleicht alte docs.res.locals
ist ein Namensraum, der speziell für diese. Mutiert Anfrage kann gefährlich sein, da es vorbehalten, die Eigenschaften und die sich entwickelnden standards.res.locals
war ein non-starter.multer
undexpress-http-proxy
sind zwei Prominente Beispiele. Aus diesem Grund, denke ich, dass @real_ate 's Kommentar trifft den Nagel auf den Kopf.Ich glaube nicht, dass die beste Praxis werden an eine variable wie
req.YOUR_VAR
. Vielleicht möchten Sie erwägenreq.YOUR_APP_NAME.YOUR_VAR
oderreq.mw_params.YOUR_VAR
.Es wird Ihnen helfen zu vermeiden das überschreiben von anderen Parametern.
req.YOUR_APP_NAME = {}
zunächst? Versuchen Sie einfach, zu schreibenreq.YOUR_APP_NAME.someVar
erhalten Sie eine Fehlermeldung wiereq.YOUR_APP_NAME
ist noch nicht definiert.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
Funktion, wird es auslösen express' Fehlerbehandlung und fallen aus. überprüfen Sie die docs.Weil
req
undres
sind zwei verschiedene Objekte.Müssen Sie sich für das Grundstück, auf dem gleichen Objekt, das Sie Hinzugefügt.
Der trick ist ziemlich einfach... Die Anfrage-Zyklus ist noch ziemlich lebendig. Sie können fügen Sie einfach eine neue variable, die erstellt eine temporäre, ruft
Da können Sie die Bearbeitung Ihrer Anfrage, in der ersten middleware -
In der middleware 1 Sie mit Ihrer Logik und speichern Sie Ihre Wert wie folgt:
In der middleware-2 Sie fangen kann dieser Wert von der middleware 1 wie folgt:
Wie oben erwähnt, res.einheimischen ist ein gutes (empfohlen) Weg, dies zu tun. Sehen hier für eine schnelle Anleitung, wie man dies in Express.