당신이 뭔가를 만들 수 있습니다 비슷한 미들웨어 공장:
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();
}
})
}
}
사용법:
router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)
액세스 경로:
router.get('/', (req, res) => {
console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});
또한 체크 아웃 Express 서 작성을 위한 미들웨어 사용에 익스프레스 앱 을 이해하는 것입니다 next
고 어떻게 작동하는(나는 당신이 그것을 일정하게 사용하지 않도).
또한 난 당신은 몇 가지 오타:
select('+password')
-당신은 확실한 플러스가 필요한가?
findOne({_id: id})
-야 findOne({_id: user})
? 또는 이유 정의 user
그렇지 않으면?
P.S....그리고 결코 잊지 못하는 오류 처리:)
res.locals
대신 직접req
. 이 습관이 있습을 재정의 중요한 변수req
체입니다.