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

