如何自定义 json- 服务器错误处理
How to customize json-server error handling
我想自定义我的 json- 服务器默认错误处理。
例如,如果我执行 POST 并且数据已经存在,我会收到 500 错误消息:
Error: Insert failed, duplicate id
at Function.insert (<...>\node_modules\lodash-id\src\index.js:49:18)
at <...>\node_modules\lodash\lodash.js:4388:28
at arrayReduce (<...>\node_modules\lodash\lodash.js:683:21)
at baseWrapperValue (<...>\node_modules\lodash\lodash.js:4387:14)
at LodashWrapper.wrapperValue (<...>\node_modules\lodash\lodash.js:9050:14)
at create (<...>\node_modules\json-server\lib\server\router\plural.js:235:48)
at Layer.handle [as handle_request] (<...>\node_modules\express\lib\router\layer.js:95:5)
at next (<...>\node_modules\express\lib\router\route.js:137:13)
at next (<...>\node_modules\express\lib\router\route.js:131:14)
at Route.dispatch (<...>\node_modules\express\lib\router\route.js:112:3)
相反,我想 return 409 冲突。
我试图覆盖 router.render
,但在这种特定情况下未调用渲染。
我也试过添加全局错误处理程序,但没有被调用。
我找到的解决方案是手动删除默认错误处理程序。
https://github.com/typicode/json-server/blob/5c0331d1dc0caf72b81c211ca089b5e78a1c8826/src/server/router/index.js#L86
然后,添加一个新的错误处理程序工作:
router.stack = router.stack.filter(item => item.handle.length !== 4)
router.use((err, req, res, next) => {
let status = 500;
if (err.message === 'Insert failed, duplicate id') {
status = 409
}
res.status(status).send({
message: err.message
})
})
我想自定义我的 json- 服务器默认错误处理。
例如,如果我执行 POST 并且数据已经存在,我会收到 500 错误消息:
Error: Insert failed, duplicate id
at Function.insert (<...>\node_modules\lodash-id\src\index.js:49:18)
at <...>\node_modules\lodash\lodash.js:4388:28
at arrayReduce (<...>\node_modules\lodash\lodash.js:683:21)
at baseWrapperValue (<...>\node_modules\lodash\lodash.js:4387:14)
at LodashWrapper.wrapperValue (<...>\node_modules\lodash\lodash.js:9050:14)
at create (<...>\node_modules\json-server\lib\server\router\plural.js:235:48)
at Layer.handle [as handle_request] (<...>\node_modules\express\lib\router\layer.js:95:5)
at next (<...>\node_modules\express\lib\router\route.js:137:13)
at next (<...>\node_modules\express\lib\router\route.js:131:14)
at Route.dispatch (<...>\node_modules\express\lib\router\route.js:112:3)
相反,我想 return 409 冲突。
我试图覆盖 router.render
,但在这种特定情况下未调用渲染。
我也试过添加全局错误处理程序,但没有被调用。
我找到的解决方案是手动删除默认错误处理程序。 https://github.com/typicode/json-server/blob/5c0331d1dc0caf72b81c211ca089b5e78a1c8826/src/server/router/index.js#L86
然后,添加一个新的错误处理程序工作:
router.stack = router.stack.filter(item => item.handle.length !== 4)
router.use((err, req, res, next) => {
let status = 500;
if (err.message === 'Insert failed, duplicate id') {
status = 409
}
res.status(status).send({
message: err.message
})
})