Můžete vytvořit něco podobného na 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();
}
})
}
}
Použití:
router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)
Přístup na trasy:
router.get('/', (req, res) => {
console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});
Podívejte se také Vyjádřit docs: Psaní middleware pro použití v Express aplikace se pochopit, co je next
a jak to funguje (všiml jsem si nechtěl použít ve své snaze).
Také myslím, že máš pár překlepů:
select('+password')
- jste si jistý, plus je nutné?
findOne({_id: id})
- by měly být findOne({_id: user})
? Nebo proč jste definovali user
jinak?
P. S. ... a nikdy nezapomenu, jak zvládnout chyby :)
res.locals
místo přímo nareq
. Tento zvyk může přepsat důležité proměnné vreq
objekt.