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 étant 'indéfinie'".
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
////middleware2
...
some conditions
...
variable = req.somevariable;
...
Attachez votre variable à l'objet req
, pas res
.
Au lieu de
res.somevariable = variable1;
Avoir:
req.somevariable = variable1;
Comme d'autres l'ont fait remarquer, res.locals
est la méthode recommandée pour transmettre des données via un middleware.
C’est à quoi sert l’objet res.locals . La définition de variables directement sur l'objet de requête n'est pas prise en charge ni documentée. res.locals a la garantie de conserver l'état pendant la durée de vie d'une requête.
Un objet contenant des variables locales de réponse étendues à la demande, et donc uniquement disponibles pour la ou 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 requête, telles que le nom du chemin de la requête, l'utilisateur authentifié, les paramètres utilisateur, etc.
app.use(function(req, res, next) {
res.locals.user = req.user;
res.locals.authenticated = !req.user.anonymous;
next();
});
Pour récupérer la variable dans le middleware suivant:
app.use(function(req, res, next) {
if (res.locals.authenticated) {
console.log(res.locals.user.id);
}
next();
});
Je ne pense pas que la meilleure pratique consiste à transmettre une variable telle que req.YOUR_VAR
. Vous voudrez peut-être prendre en compte req.YOUR_APP_NAME.YOUR_VAR
ou req.mw_params.YOUR_VAR
.
Cela vous aidera à éviter de remplacer d'autres attributs.
C'est parce que req
et res
sont deux objets différents.
Vous devez rechercher la propriété sur le même objet que celui que vous avez ajouté.
Le truc est assez simple ... Le cycle de demande est encore très vivant. Vous pouvez simplement ajouter une nouvelle variable qui créera un appel temporaire
app.get('some/url/endpoint', middleware1, middleware2);
Puisque vous pouvez gérer votre demande dans le premier middleware
(req, res, next) => {
var yourvalue = anyvalue
}
Dans le middleware 1, vous gérez votre logique et stockez votre valeur comme ci-dessous:
req.anyvariable = yourvalue
Dans le middleware 2, vous pouvez récupérer cette valeur du middleware 1 en procédant comme suit:
(req, res, next) => {
var storedvalue = req.yourvalue
}