You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"); // 也可以根据需求用单独的错误页面
}

修正说明:

  1. 用await直接获取查询结果,移除多余的.then逻辑
  2. 增加if (!theBeverage)判断,无匹配数据时主动返回404页面并终止后续代码执行
  3. 调整res.status(404).render()的顺序,确保响应状态码正确设置
  4. catch块现在处理数据库操作的异常情况,比如传入的ID格式非法等,可根据实际需求返回对应错误页面

内容的提问来源于stack exchange,提问作者mehmet akif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:01:08