使用MongoDB实现任务添加功能时出现Cannot read properties of undefined (reading '_id')错误排查求助
MongoDB实现任务添加功能时出现Cannot read properties of undefined (reading '_id')错误排查求助
我最近在开发一个任务管理功能,用MongoDB做数据库,想通过POST接口把新任务关联到当前登录用户并保存到数据库,但遇到了棘手的问题:在addNewTask控制器里,req.user是undefined,导致无法获取req.user._id,直接抛出Cannot read properties of undefined (reading '_id')错误。
以下是我的相关代码:
User 模型
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ username: { type: String, required: true }, password: { type: String, required: true } }) module.exports = mongoose.model('User', userSchema);
Task 模型
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const taskScheme = new Schema({ description: { type: String, required: true }, status: { type: String, required: true }, userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true } }) module.exports = mongoose.model('Task', taskScheme);
Admin 控制器(问题核心在addNewTask方法)
const Task = require("../models/task"); exports.addNewTask = (req, res, next) => { const taskDesc = req.body.taskDesc; const userId = req.user._id; console.log('taskDesc is: ', taskDesc); console.log('req.user is: ', req.user) // 控制台输出: 'req.user is: undefined' const newTask = new Task({ description: taskDesc, status: 'In Progress', userId: userId }); newTask.save() .then(() => { console.log('Task created'); res.redirect('/'); }) .catch((err) => { console.log(err); }) } // TODO: 后续要关联当前用户删除对应任务 exports.removeTask = (req, res, next) => { const taskId = req.body.taskId; Task.findByIdAndRemove({ _id: taskId }) .then(() => { res.redirect('/') }) .catch(err => { console.log('removeTask error: ', err); }); } // TODO: 后续要关联当前用户修改对应任务状态 exports.editTaskToFinish = (req, res, next) => { const taskId = req.body.taskId; Task.findByIdAndUpdate( {_id: taskId}, {$set: {status: 'Done'}}) .then(() => { res.redirect('/'); }) .catch((err) => { console.log('editTaskToFinish: ', err) res.redirect('/'); }) }
测试情况
我做了个粗暴的测试:手动把代码里的userId替换成MongoDB中已存在的用户_id,结果addNewTask能正常工作,任务会被正确保存到数据库并关联该用户。这说明任务的创建和关联逻辑本身是没问题的,核心问题就是当前请求中req.user没有被正确赋值,导致拿不到用户ID。
我现在有点摸不着头脑,明明User模型里MongoDB会自动生成_id字段,为什么req.user就是undefined呢?有没有大佬能帮我排查一下问题?如果需要更多信息(比如登录验证的中间件代码、路由配置等),我可以随时补充~
备注:内容来源于stack exchange,提问作者Nansi
相关产品推荐
相关产品推荐

