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

Express GET请求返回404错误,查询MongoDB用户数据求助

问题排查与修复方案

1. 路由参数匹配验证

首先确认你的路由定义是否正确捕获邮箱参数。Express默认的路由参数匹配规则[^/]+支持@和.,但可以先在函数内打印参数,验证是否正确获取到完整邮箱:

export async function getUser(req, res){
  const { email } = req.params;
  console.log('Received email:', email); // 检查控制台输出是否为success123@gmail.com
  // ... 剩余代码
}

如果参数不完整,可显式添加邮箱正则匹配路由:

app.get('/api/user/:email([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})', getUser);

2. 回调式查询无法被try/catch捕获错误

你使用了async函数,但UserModel.findOne的回调写法不会返回Promise,导致回调内的错误无法被外层try/catch捕获,反而同步错误(如UserModel未定义)会触发catch块返回404。改用Promise风格的查询:

export async function getUser(req, res){
  const { email } = req.params;

  try {
    if(!email) return res.status(400).send({ error: "Invalid email"})

    // 改用await捕获异步错误
    const user = await UserModel.findOne({ email });
    if(!user) return res.status(404).send({ error: "Couldn't Find User"});

    return res.status(200).send(user)
  } catch (error) {
    console.error('Server error:', error); // 打印错误详情便于排查
    return res.status(500).send({ error: "Server internal error"})
  }
}

同时修正状态码使用:

  • 无效参数用400(Bad Request),而非501
  • 找不到用户用404(Not Found)
  • 服务器错误用500(Internal Server Error)

3. 检查UserModel导入与数据库连接

  • 确认UserModel已正确导入,路径和文件名无错误:
    import UserModel from '../models/User.js'; // 根据实际项目路径调整
    
  • 验证MongoDB Atlas连接状态,启动时添加连接日志:
    mongoose.connect(process.env.MONGODB_URI)
      .then(() => console.log('Connected to MongoDB successfully'))
      .catch(err => console.error('MongoDB connection failed:', err));
    

4. 邮箱大小写匹配问题

MongoDB查询默认区分大小写,若数据库中邮箱为Success123@gmail.com,而请求的是全小写,会导致查询失败。可改为不区分大小写查询:

const user = await UserModel.findOne({ email: { $regex: new RegExp(`^${email}$`, 'i') } });

或在Schema定义时设置自动转小写:

const userSchema = new mongoose.Schema({
  email: { type: String, required: true, lowercase: true }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:25:24