我想使用这些中间件来验证参数。问题是 router.param 总是在第一个中间件 router.all 之前应用(我也尝试了 router.use,它不起作用,因为 param 对两个中间件都是通用的)。有没有办法在 router.param 之前执行 Middleware 1 ?
// Middleware 1
router.all('/:firstId/checklist/:**secondId**/*',
(req, res, next) => {
console.log('Request matched')
next()
},
param('**secondId**', "Error message 2")
.isMongoId(),
checkValidationErrors
)
router.param('**secondId**', callback)
但是,中间件 1 并没有像我预期的那样工作。如果参数是有效的 MongoDB ObjectId,'Request matched'
则记录,则根据请求相应地应用下一个中间件。如果它不是一个有效的 id,没有'Request matched'
记录,则不会在响应中发送预期的错误。我从来自 router.param 的 Mongoose 得到这个错误:
MongooseError [CastError]: Cast to ObjectId failed for value "xxx" at path "_id" for model "XXX"
我试图评论 router.param 并解决了问题。所以肯定跟执行顺序有关。
非常感谢您的帮助