// 统一的错误处理
app.on('error', errHandler)
// 简单的错误处理
const errHandler = (err: any, ctx: Context) => {
ctx.body = err
console.log('errHandler --->:', err)
}
// 封装的校验器
export const validator = (schema) => {
return async (ctx: Context, next) => {
try {
const { error } = await schema.validateAsync(ctx.request.body)
if (error) {
throw error
}
await next()
} catch (error: any) {
// formatError 返回错误信息的函数
ctx.app.emit('error', formatError('数据格式错误', error.details, 0))
// ctx.body = {
// code: 0,
// message: '数据格式错误',
// result: error.details
// }
}
}
}
在这里直接使用ctx.body返回可以,但是使用ctx.app.emit()中的ctx.body赋值会报错,有什么方法可以使用统一的错误处理吗
可以直接用中间件来处理错误情况,没必要去挂接
error
事件;(报错可能是事件并没有提供第二个参数ctx
)改用中间件处理