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

从MongoDB获取用户详情返回Null,按ID查询遇Undefined问题求助

问题分析与解决

核心错误:属性名不匹配

在auth.js中间件里,你把解析后的用户ID挂载到了req.userId(驼峰命名),但路由代码里却尝试获取req.user_id(下划线小写命名),这直接导致id变量为undefined,传给userControllers.userById后自然查不到数据,返回undefined。

修复步骤

修改路由代码里的变量赋值,保持和中间件的属性名一致:

router.get("/user", auth, async (req, res) => {
  let id = req.userId; // 改为req.userId
  userControllers
    .userById(id)
    .then((user) => res.status(200).json(user))
    .catch((err) => res.status(404).json(err));
});

其他潜在问题排查

  • 中间件错误处理漏洞:当检测到无token时,发送401响应后没有终止后续代码执行,可能引发额外错误,需添加return:
    if (!token) {
      return res.status(401).send("undefined Token!!"); // 添加return终止后续逻辑
    }
    
  • Token生成一致性:确保生成JWT时存入的用户ID字段是userId,和解析时的decodedToken.userId对应,比如生成token的代码示例:
    jwt.sign({ userId: user._id }, "secretToken", { expiresIn: "1h" });
    
  • 查询方法验证:检查userControllers.userById是否正确使用传入的ID查询MongoDB,比如Mongoose环境下需使用User.findById(id),同时确认ID格式与数据库中_id字段匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:12:24