Mongoose未找到数据时应用崩溃,如何返回404错误页?
解决Mongoose查询无数据时返回404页面的问题
你的代码存在几个问题,导致预期的404页面无法正常展示:
findOne无匹配数据不会触发catch:Mongoose的findOne在查不到对应文档时只会返回null,不会抛出错误,这种情况走不到catch块里- 混用
await和.then冗余易出错:已经用了await就没必要再链式调用.then,直接赋值结果即可 - 响应状态码设置顺序错误:
res.render()不会返回响应对象供链式调用,得先设置状态码再渲染页面
修正后的代码如下:
try { let theBeverage = await Product.findOne({ _id: beverageId }); // 检查是否查询到数据 if (!theBeverage) { res.status(404).render("404.ejs"); return; } res.render("menuetail.ejs", { theBeverage }); } catch (error) { // 处理数据库操作异常,比如无效的ObjectId格式等 res.status(500).render("404.ejs"); // 也可以根据需求用单独的错误页面 }
修正说明:
- 用
await直接获取查询结果,移除多余的.then逻辑 - 增加
if (!theBeverage)判断,无匹配数据时主动返回404页面并终止后续代码执行 - 调整
res.status(404).render()的顺序,确保响应状态码正确设置 catch块现在处理数据库操作的异常情况,比如传入的ID格式非法等,可根据实际需求返回对应错误页面
内容的提问来源于stack exchange,提问作者mehmet akif
相关产品推荐
相关产品推荐

