Eh bien, ma question est que je veux passer une variable du premier middleware à un autre middleware, et j'ai essayé de le faire, mais il y avait " req.somevariable
est une donnée comme 'non définie'".
//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
la source
la source
res
dans middleware1 et essayez de l'obtenirreq
dans middleware2.Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.localsRéponses:
Attachez votre variable à l'
req
objet, nonres
.Au lieu de
Avoir:
Comme d'autres l'ont souligné,
res.locals
c'est la façon recommandée de transmettre des données via un middleware.la source
res.locals
pasreq.res.locals
.res.locals.myVar
est la voie à suivre.C'est à cela que sert l' objet res.locals . La définition de variables directement sur l'objet de demande n'est ni prise en charge ni documentée. res.locals est garanti de tenir l'état pendant la durée d'une demande.
res.locals
Pour récupérer la variable dans le middleware suivant:
la source
req
objet expressjs.com/en/guide/writing-middleware.html . Regardez la sectionMiddleware function requestTime
res.json({})
, etc.res.locals
n'est disponible sur le serveur principal que pendant la durée de la demande. expressjs.com/en/5x/api.htmlJe ne pense pas que la meilleure pratique passera une variable comme
req.YOUR_VAR
. Vous voudrez peut-être envisagerreq.YOUR_APP_NAME.YOUR_VAR
oureq.mw_params.YOUR_VAR
.Cela vous aidera à éviter d'écraser d'autres attributs.
Mise à jour du 31 mai 2020
res.locals est ce que vous recherchez, l'objet est limité à la demande.
Un objet qui contient des variables locales de réponse étendues à la demande, et donc disponible uniquement pour les vues rendues pendant ce cycle de demande / réponse (le cas échéant). Sinon, cette propriété est identique à app.locals.
Cette propriété est utile pour exposer des informations au niveau de la demande telles que le nom du chemin de la demande, l'utilisateur authentifié, les paramètres utilisateur, etc.
la source
req.YOUR_APP_NAME = {}
initialement? Vous essayez juste d'écrire pourreq.YOUR_APP_NAME.someVar
vous obtenir une erreur car ellereq.YOUR_APP_NAME
n'est pas encore définie.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
fonction, cela déclenchera le gestionnaire d'erreur express et disparaîtra. consultez les documents.C'est parce que
req
etres
sont deux objets différents.Vous devez rechercher la propriété sur le même objet auquel vous l'avez ajouté.
la source
L'astuce est assez simple ... Le cycle de demande est toujours bien vivant. Vous pouvez simplement ajouter une nouvelle variable qui créera un temporaire, appelant
Puisque vous pouvez gérer votre demande dans le premier middleware
Dans le middleware 1, vous gérez votre logique et stockez votre valeur comme ci-dessous:
Dans le middleware 2, vous pouvez récupérer cette valeur à partir du middleware 1 en procédant comme suit:
la source
Comme mentionné ci-dessus, res.locals est un bon moyen (recommandé) de le faire. Voir ici pour un didacticiel rapide sur la façon de procéder dans Express.
la source