如何获取已登录用户的MongoDB _id?解决req.user.id返回undefined问题
解决req.user.id返回undefined的问题
你遇到的问题核心很简单:MongoDB默认生成的用户主键字段是_id,而非id,req.user对象里根本不存在id这个属性,所以调用req.user.id自然会返回undefined。
给你两个实用的解决办法:
- 直接使用
req.user._id获取用户ID,这是最直接的方案,毕竟你已经能通过req.user看到这个字段。 - 如果你习惯用
id来访问,可以在用户的Mongoose模型里配置虚拟属性,让_id自动映射为id:
// 在User模型定义中添加配置 const userSchema = new mongoose.Schema({ // 你的用户字段定义 }); // 定义虚拟属性id,映射到_id的字符串形式 userSchema.virtual('id').get(function() { return this._id.toHexString(); }); // 确保虚拟属性在转JSON时被包含 userSchema.set('toJSON', { virtuals: true, versionKey: false, transform: function(doc, ret) { delete ret._id; } // 可选:移除原始的_id字段,让返回结构更简洁 });
配置完成后,再访问req.user.id就能拿到用户ID的字符串形式了,不管用哪种方式,只要能正确定位到用户文档,就能把新提交的字符串存储到对应用户的数据集合里。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

