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

使用Mongoose在本地MongoDB创建文档失败,仅生成ID无业务数据

问题解决:Mongoose仅生成_id和__v字段,无法存入提交数据

问题现象

本地部署的MongoDB通过Mongoose创建Document时,仅生成_id和__v字段,前端提交的name、email、password数据未存入数据库,数据库中数据示例:

{ "_id": { "$oid": "651d8f91c018db3d9504da2a" }, "__v": 0 }

mongosh shell和MongoDB Compass可正常操作,但mongosh提示警告Access control is not enabled for the database,同时后端抛出ValidationError:

ValidationError: user validation failed: password: Path `password` is required., email: Path `email` is required., name: Path `name` is required.

核心错误原因

后端POST路由的回调函数参数顺序错误:Express路由回调的标准参数顺序是(req, res)(请求对象在前,响应对象在后),但代码中写成了(res, req),导致req.body实际指向响应对象,无法获取前端传入的JSON数据,因此三个字段的值均为undefined,触发Mongoose Schema的必填验证失败。

修复步骤

  1. 修正路由参数顺序
    将后端/signin路由的参数顺序调换,同时添加错误捕获避免服务器崩溃:
// 错误写法
app.post('/signin', async(res,req) => {
  let user = await User.create(req.body)
  console.log(req.body)
  res.status(200).json({success: true, user: user })
});

// 正确写法
app.post('/signin', async(req, res) => {
  console.log(req.body); // 打印请求体,确认数据是否正常接收
  try {
    let user = await User.create(req.body);
    res.status(200).json({success: true, user: user });
  } catch (err) {
    res.status(400).json({success: false, error: err.message });
  }
});
  1. 验证数据接收
    启动服务后,提交表单时查看后端控制台的req.body输出,确认是否包含name、email、password字段及对应值,确保前端请求数据正常传递到后端。

关于MongoDB权限警告的说明

Access control is not enabled for the database是MongoDB的安全提示,表示数据库未开启身份验证,与当前无法存入数据的问题无关。该警告仅提示存在安全风险,若需开启认证需修改MongoDB配置文件并创建用户,但不影响数据写入功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:49:48