node express try catch不能按预期工作

编程入门 行业动态 更新时间:2024-09-28 11:18:34

node express try catch不能按预期<a href=https://www.elefans.com/category/jswz/34/1771444.html style=工作"/>

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不能按预期工作

本文发布于:2024-05-07 11:32:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756047.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工作   node   express   catch

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!