Nun, meine Frage ist, dass ich eine Variable von der ersten Middleware an eine andere Middleware übergeben möchte, und ich habe versucht, dies zu tun, aber es gab " req.somevariable
eine gegebene als 'undefiniert'".
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
////middleware2
...
some conditions
...
variable = req.somevariable;
...
javascript
node.js
express
middleware
next
user2791897
quelle
quelle
res
in Middleware1 zuweisen und versuchen, ihnreq
in Middleware2 abzurufen.Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.localsAntworten:
Hängen Sie Ihre Variable an das
req
Objekt an, nichtres
.Anstatt
Haben:
Wie andere bereits betont haben,
res.locals
wird empfohlen, Daten durch Middleware zu übertragen.quelle
res.locals
, nichtreq.res.locals
.res.locals.myVar
ist der Weg zu gehen.Dafür ist das Objekt res.locals gedacht . Das Festlegen von Variablen direkt für das Anforderungsobjekt wird nicht unterstützt oder dokumentiert. res.locals garantiert den Status während der Laufzeit einer Anfrage.
res.locals
So rufen Sie die Variable in der nächsten Middleware ab:
quelle
req
Objekt expressjs.com/de/guide/writing-middleware.html festgelegt . Schauen Sie sich den AbschnittMiddleware function requestTime
res.json({})
usw.,res.locals
die nur im Back-End über die Laufzeit der Anforderung verfügbar ist. expressjs.com/de/5x/api.htmlIch denke nicht, dass die beste Vorgehensweise darin besteht, eine Variable wie zu übergeben
req.YOUR_VAR
. Vielleicht möchten Siereq.YOUR_APP_NAME.YOUR_VAR
oderreq.mw_params.YOUR_VAR
.Auf diese Weise können Sie vermeiden, dass andere Attribute überschrieben werden.
Update 31. Mai 2020
res.locals ist das, wonach Sie suchen. Das Objekt ist auf die Anforderung ausgerichtet.
Ein Objekt, das lokale Antwortvariablen enthält, die für die Anforderung gültig sind und daher nur für die Ansichten verfügbar sind, die während dieses Anforderungs- / Antwortzyklus (falls vorhanden) gerendert wurden. Ansonsten ist diese Eigenschaft identisch mit app.locals.
Diese Eigenschaft ist nützlich, um Informationen auf Anforderungsebene wie den Namen des Anforderungspfads, den authentifizierten Benutzer, Benutzereinstellungen usw. bereitzustellen.
quelle
req.YOUR_APP_NAME = {}
zunächst einzustellen ? Wenn Sie nur versuchen, anreq.YOUR_APP_NAME.someVar
Sie zu schreiben, wird eine Fehlermeldungreq.YOUR_APP_NAME
angezeigt, die noch nicht definiert ist.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
function übergeben, wird der Express-Fehlerhandler ausgelöst und der Vorgang abgebrochen . Überprüfen Sie die Dokumente.Das liegt daran
req
undres
sind zwei verschiedene Objekte.Sie müssen die Eigenschaft für dasselbe Objekt suchen, zu dem Sie sie hinzugefügt haben.
quelle
Der Trick ist ziemlich einfach ... Der Anforderungszyklus ist noch ziemlich lebendig. Sie können einfach eine neue Variable hinzufügen, die einen temporären Aufruf erstellt
Da können Sie Ihre Anfrage in der ersten Middleware bearbeiten
In Middleware 1 behandeln Sie Ihre Logik und speichern Ihren Wert wie folgt:
In Middleware 2 können Sie diesen Wert von Middleware 1 wie folgt abrufen:
quelle
Wie oben erwähnt, ist res.locals eine gute (empfohlene) Möglichkeit, dies zu tun. Sehen Sie hier eine kurze Anleitung, wie man dies in Express zu tun.
quelle