Express.js 응용 프로그램에서 사용자 정의 유효성 검사 및 매개 변수 구문 분석이 있습니다. 내 경로 중 하나에 대해 obj_id가 경로의 일부로 제공 될 것으로 기대하고 있습니다. mongoose가 DB에서 해당 ID를 가진 obj를 찾지 못하면 404 오류를 반환합니다. router.use 호출 전에 router.param 호출을 두었으므로 먼저 param 유효성 검사가 실행될 것으로 기대됩니다. 그러나 node-inspector를 사용하면 사용자 정의 미들웨어를 사용하기 전에 param 함수에 도달하지 않았는지 확인할 수 있습니다.ExpressJS : Router.param() 및 Router.use()의 미들웨어 제어 흐름
미들웨어보다 먼저 구문 분석을 수행하려면 어떻게해야합니까?
이 미들웨어는 여러 기능에서 사용되고 있으므로 라우터 호출에 추가하고 싶지 않습니다.
router.param('obj', function(req, res, next, id){
Obj.findOne({_id: id}, function(err, obj){
if (err || !obj) {
res.status(404).json({error: {message: "No obj with that ID", type: "bad_parameters.unknown_obj"}});
} else {
req.obj = obj;
next();
}
});
});
router.use(function(req,res,next){
...
//Do some validations
...
if(error) return res.status(400).json(error);
next();
});
...
//Other routes that are working well
...
router.get('/:obj', obj);
예상 오류 :
404 {error: {message: "No obj with that ID", type: "bad_parameters.unknown_obj"}}
실제 오류 : 당신의 도움에 미리
400 {error: {message: "Validation failed", type: "bad_parameters"}}
감사합니다!
'미들웨어/경로 스택 실행이 자리를 포함하는 경로 처리기에 도달 할 때 param' 핸들러가 실행됩니다. 실제 라우트 핸들러보다 먼저 router.get()'*에 대한 또 다른 인자로서 미들웨어를 옮겨 보았습니까? – mscdex