有一个这样的 api 应用程序:
const express = require('express')
const app = express()
const router = require('express').Router()
...
route.post('/dogs', (req, res, next) => {
const dog = new Dog() // it defined in real app
dog.validate() // error happens here
.then(() => {
return res.status(201)
})
// [1]
})
...
app.use('/api/v1', router)
app.use(notFoundErrorHandler)
app.use(globalErrorHandler)
function notFoundErrorHandler (req, res, next) {
res.status(404)
res.send({error: 'Not found'})
}
function globalErrorHandler (err, req, res, next) {
if (err) {
res.status(err.status || 500)
res.json({error: err.message || err})
}
}
如果存在验证错误,它不会传递给globalErrorHandler
,但是捕获并重新抛出错误可以解决问题 [1]:
.catch(err => { return next(err) })
对于未完成 Promise 实现的猫鼬,这种行为是否正常,或者它可以以其他方式实现?
save
使用,find
等其他方法时不会引发错误。