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

API GET路由无返回值:按用户邮箱查询行程列表失败

问题排查与修复方案

以下是导致接口无返回值的核心问题及对应修复方式:

1. 请求参数不匹配

你定义了const email = req.params.email;,但查询条件里却用req.params.userEmail,二者完全不统一。如果路由参数是/itineraries/:email,req.params.userEmail根本取不到有效数值,查询条件会变成{userEmail: undefined},自然查不到数据,甚至引发后续逻辑异常。

修复:统一参数名,比如都使用email:

const email = req.params.email;
Itinerary.find({userEmail: email})

若路由参数是/:userEmail,则将变量名改为userEmail,保持前后一致即可。

2. 空数据判断逻辑错误

Mongoose的find()方法无论是否查到数据,都会返回数组——无匹配数据时返回空数组[],而空数组在JavaScript中属于「真值」,所以!data永远为false,不会触发404响应。如果数据库中没有该用户的行程,代码会返回空数组,若前端未处理空数组场景,可能会误以为没有返回值。

修复:通过数组长度判断是否存在数据:

if (data.length === 0)
  res.status(404).send({ message: "Not found Itinerary with email " + email });
else res.send(data);

3. 未定义变量引发潜在报错

404提示信息中使用了userEmail变量,但该变量从未声明,会触发ReferenceError直接进入catch块。若服务器未配置错误日志,你可能看不到这个报错,但会导致响应异常。

修复:使用已定义的email变量:

res.status(404).send({ message: "Not found Itinerary with email " + email });

4. 错误信息与业务不符

catch块中的错误信息写的是「Some error occurred while retrieving tutorials.」,和行程(itinerary)业务不匹配,排查时容易误导,建议修改为对应业务的描述:

err.message || "Some error occurred while retrieving itineraries."

修复后的完整代码

exports.findAllByEmail = (req, res) => {
  const email = req.params.email;
  Itinerary.find({ userEmail: email })
    .then(data => {
      if (data.length === 0)
        res.status(404).send({ message: "Not found Itinerary with email " + email });
      else res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message: err.message || "Some error occurred while retrieving itineraries."
      });
    });
}

额外排查点

  • 确认Itinerary模型是否正确关联itinerary集合:Mongoose默认会将模型名转为复数(比如itineraries),若数据库集合名是单数itinerary,需要在模型定义中指定collection: 'itinerary'。
  • 用Postman或curl直接调用接口,查看响应状态码和具体内容,不要仅依赖前端反馈——比如返回200但空数组是数据问题,返回500则查看具体错误信息。
  • 核对数据库中是否确实存在该userEmail对应的行程数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:32