Как настроить обработку ошибок json-сервера - PullRequest
1 голос
/ 08 июля 2019

Я бы хотел настроить обработку ошибок по умолчанию на моем 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)

Вместо этого я хотел бы вернуть конфлит 409.

Я пытался перезаписать router.render, но рендеринг не вызывается в этом конкретном случае.

I 'Мы также пытались добавить глобальный обработчик ошибок, но он не вызывается.

1 Ответ

0 голосов
/ 12 июля 2019

Решение, которое я нашел, состоит в том, чтобы вручную удалить обработчик ошибок по умолчанию. 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
  })
})
...