Usted puede crear algo similar a la del middleware de la fábrica:
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();
}
})
}
}
Uso:
router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)
El acceso en las rutas:
router.get('/', (req, res) => {
console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});
También echa un vistazo a Expresar docs: Escrito de middleware para su uso en Expresar apps para entender lo que es next
y cómo funciona (me di cuenta de que no lo uso en su intento).
También supongo que usted tiene pocos errores ortográficos:
select('+password')
- ¿está usted seguro de que más es necesario?
findOne({_id: id})
- debe ser findOne({_id: user})
? O por qué te define user
de otra manera?
P. S. ... y nunca te olvides de controlar los errores :)
res.locals
en lugar de directamente areq
. Este hábito puede reemplazar variables importantes en elreq
objeto.