Vous pouvez créer quelque chose de similaire à middleware factory:
const checkPassword = (returnPassword = false) => {
return (req, res, next) => {
User.findOne({_id: req.body_id })
.select('+password')
.exec((err, result) => {
if (err) {
console.error(err);
return res.status(500).send() // End of request on error?
} else {
const password = result['password'] // get your password this way or somehow else
if (returnPassword) {
// Store password in request if returnPassword=true
res.locals.userPassword = password;
}
next();
}
})
}
}
Utilisation:
router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)
L'accès au parcours:
router.get('/', (req, res) => {
console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});
Consultez également Exprimer docs: Écrit, de middleware pour une utilisation dans l'Express apps pour comprendre ce qu'est next
et comment il fonctionne (j'ai remarqué que vous n'avez pas l'utiliser dans votre tentative).
Aussi, je suppose que vous avez quelques fautes de frappe:
select('+password')
- êtes-vous sûr de plus est-il nécessaire?
findOne({_id: id})
- doit être findOne({_id: user})
? Ou pourquoi vous avez défini user
sinon?
P. S. ... et n'oubliez pas de gérer les erreurs :)
res.locals
au lieu de directement dereq
. Cette habitude peut remplacer les variables importantes dans lereq
objet.