使用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
相关产品推荐
相关产品推荐

