工作"/>
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不能按预期工作
发布评论