【问题标题】:How to customize json-server error handling如何自定义 json-server 错误处理
【发布时间】:2019-11-17 16:23:21
【问题描述】:

我想自定义我的 json-server 默认错误处理。

例如,如果我执行 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)

我想返回一个 409 conflit,而不是这样。

我试图覆盖router.render,但在这种特殊情况下没有调用渲染。

我也尝试添加一个全局错误处理程序,但它没有被调用。

【问题讨论】:

    标签: javascript json-server


    【解决方案1】:

    我找到的解决方案是手动删除默认错误处理程序。 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
      })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2013-02-12
      • 2011-01-29
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多