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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:33:09