首页 > 解决方案 > 在 findByIdAndDelete 上处理 NodeJS DELETE 端点中的捕获

问题描述

我正在尝试找到处理输出/响应中捕获错误的最佳方法。

我有这条通过 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' })- 这不是让服务器记录等吗?

标签: javascriptnode.jsmongoosetry-catch

解决方案


这是示例解决方案:

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!',
        },
    });
})


推荐阅读