Môžete vytvoriť niečo podobné middleware výroby:
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();
}
})
}
}
Použitie:
router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)
Prístup v trasách:
router.get('/', (req, res) => {
console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});
Pozrite sa tiež Vyjadriť dokumenty: Písanie middleware pre použitie v Express aplikácie pochopiť, čo je next
a ako to funguje (všimol som si, ako ste nemali používať ho vo svoj pokus o spojenie).
Tiež myslím, že máte niekoľko preklepov:
select('+password')
- ste si istý, plus je to potrebné?
findOne({_id: id})
- by mal byť findOne({_id: user})
? Alebo, prečo ste definované user
inak?
P. S. ... a nikdy nezabudnem na rukoväť chyby :)
res.locals
namiesto priamo nareq
. Tento zvyk môže prepísať dôležité premenné vreq
objekt.