admin管理员组

文章数量:814986

node express try catch不能按预期工作

我是Node / Express.js的初学者,我正在尝试一些try catch逻辑,但似乎无法按预期工作。

app.get("/tasks/:id", async (req, res) => {
  try {
    const _id = req.params.id;
    const task = await Task.findById(_id);

    if (!task) {
      return res.status(404).send("task not found");
    }
    res.send(task);
  } catch (error) {
    res.status(500).send("Internal server error");
  }
});

从此代码示例中,我正在查询Mongo DB以获取某些任务,但问题是,如果未找到该任务,则该程序将直接跳转到catch块,而不是通过if语句运行如果不检查条件,则导致不同的错误。如何解决此问题?

回答如下:

这就是MongooseJS的工作方式-检查它们的Promises documentation,您会看到,如果找不到文档,则会引发错误。如果您未使用await,则findById() documentation显示如果找不到错误,如何返回错误:

findById()

您可以简单地将路线修改为如下所示:

// find adventure by id and execute
Adventure.findById(id, function (err, adventure) {});

如果您要执行其他错误检查,这会稍微灵活一些;首先声明app.get("/tasks/:id", async (req, res) => { let task; try { task = await Task.findById(req.params.id); } catch (error) { return res.status(404).send("task not found"); } /* perform other checks or actions here if desired */ res.send(task); }); ,以便可以在try / catch块之外进行访问,如果该任务不存在,则会引发404错误。

您还可以查看task,它会基于文档是否存在而返回true或false,但是由于您需要的实际结果不太有意义。

本文标签: node express try catch不能按预期工作