【问题标题】:Handle catch in NodeJS DELETE endpoint on findByIdAndDelete在 findByIdAndDelete 上处理 NodeJS DELETE 端点中的捕获
【发布时间】:2020-01-04 11:05:30
【问题描述】:

我正在努力寻找处理输出/响应中捕获错误的最佳方法。

我有这条通过 ID 删除游戏的路由

router.delete("/delete/:id", (req, res) => {
  (async () => {

    try {
      let deleteGame = await gameModel.findByIdAndDelete(ObjectId(req.params.id)).exec();

      if (deleteGame === null) {
        res.json({ error: `No game found with id ${req.params.id}` })
      } else {
        res.json({ message: `Game ${game.name} deleted` })
      }

    } catch (error) {
      console.log(error)
    }

  })();
});

例如,当 ID 采用意外格式时,mongoose 将返回 Argument passed in must be a single String of 12 bytes or a string of 24 hex characters在“赶上”

我不确定在 catch 中执行 res.json({ message: 'An error occured' }) 是否是一个好习惯 - 这不是让服务器记录等吗?

【问题讨论】:

  • 什么是 f.x.代表什么?
  • 我猜是“例如”,但最好写出来...
  • 你能告诉我你传递的是什么身份吗@morten-hagh
  • @RajuSingh - 我正在发送一个可能如下所示的 objectID:“5e0f8c3193a21e3ee06ed32f”它是创建文档时提供给文档的 ID。
  • 如果可能的话,您能否将您的 gameModel.Sending 错误消息显示为 json 是不够的。它也应该有状态码。例如:成功删除它应该是 204,对于无效或不存在的 id 404 否则 500。你能把聊天框中的错误日志发给我吗? @MortenHagh

标签: javascript node.js mongoose try-catch


【解决方案1】:

我不确定在 catch 中执行 res.json({ message: 'An error occured' }) 是否是一个好习惯 - 这不是让服务器记录等吗?

好吧,无论您是否在服务器上记录错误,您都需要向请求发送一些响应。所以是的,从catch 中调用res.json 是有意义的。您返回的确切错误取决于您。 (根据你在deleteGamenull 时所做的事情,你可能想要error 而不是message。)

【讨论】:

  • 感谢您的回答!我将发送一个带有自定义错误描述的 json 响应。
【解决方案2】:

这里是示例解决方案:

router.delete("/delete/:id", (req, res) => {
  (async () => {

    try {
      let deleteGame = await gameModel.findByIdAndDelete(ObjectId(req.params.id)).exec();

      if (deleteGame === null) {
        res.status(404).send({ error: `No game found with id ${req.params.id}` })
      } else {
        res.status(204).send({ message: `Game ${game.name} deleted`, })
      }

    } catch (error) {
      console.log(error);
      // pass this to error handler middleware, this will give 500
      next(error);
    }

  })();
});

server.js 或 index.js 中的错误处理程序中间件

app.use(function (err, req, res, next) {
res.status(err.status || 500);
    res.json({
        errors: {
            message: err.message || 'Internal Server Error!',
        },
    });
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 2019-05-23
    • 2015-09-14
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多