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

使用MongoDB查询两个日期间的通知数据返回500错误如何修复?

问题修复方案

核心错误原因

  • 变量未定义:代码中直接使用的date、expires两个变量没有声明和赋值,直接调用会抛出引用错误,是触发500状态码的核心原因。需要先从请求参数中获取这两个值,可根据你的传参逻辑从req.query(查询参数)或req.body(请求体)中提取。
  • 日期构造方法错误:ISODate是MongoDB Shell的专属内置方法,Node.js环境(包括原生Mongo驱动、Mongoose)不支持直接调用,应该使用JS原生的new Date()构造日期对象。
  • 查询字段不匹配:你的查询条件使用了createdAt作为时间筛选字段,但样例数据中存储通知发布时间的字段为date,字段名不匹配会导致查询逻辑不符合预期。
  • 错误返回逻辑异常:Error对象的核心信息(错误信息、调用堆栈)为不可枚举属性,直接用扩展运算符...error展开后会返回空对象,无法体现真实错误原因,不利于问题排查。

修复后代码

exports.getNotifications = async (req, res) => {
  try {
    // 从请求查询参数中获取date和expires,若为POST请求可调整为req.body
    const { date, expires } = req.query;
    // 前置参数校验,避免非法请求
    if (!date || !expires) {
      return res.status(400).json({ message: "缺少必填的日期范围参数" });
    }
    const notifications = await notification.find({
      // 替换为数据中真实的时间字段名date
      date: { $gte: new Date(date), $lt: new Date(expires) },
    });
    return res.status(200).json({ notifications });
  } catch (error) {
    return res.status(500).json({
      message: error.message,
      // 生产环境可注释掉stack字段,避免泄露服务端敏感信息
      stack: error.stack
    });
  }
};

内容的提问来源于stack exchange,提问作者Emir Kutlugün

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:27:03