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

Node.js+Mongoose操作MongoDB时用户数据保存不完整问题求助

问题根因分析

你遇到的问题核心由两个错误共同导致:

1. 模型导出规则错误

Node.js 中 module.exports 单次仅支持导出一个值,你在同一个模型文件中连续两次对module.exports赋值,后面的Users模型导出会直接覆盖前面的Subscription模型导出。
如果你需要在同一个文件中导出两个模型,需修改为导出对象的形式:

// 原错误写法
// module.exports = mongoose.model('Subscription',SubscriptionSchema);
// module.exports = mongoose.model('Users',endUserRegisterSchema);

// 修正后写法
module.exports.Subscription = mongoose.model('Subscription',SubscriptionSchema);
module.exports.Users = mongoose.model('Users',endUserRegisterSchema);

2. 路由误用了错误的模型实例

你现在的保存结果仅保留_id、company_name、__v字段,是典型的使用错误Schema对应的模型创建实例的表现:
你大概率在users.js路由中错误引入了Subscription模型而非Users模型。Mongoose默认开启strict严格模式,所有未在当前模型对应Schema中声明的字段都会被自动过滤:
SubscriptionSchema中仅定义了company_name字段,你赋值的username、password、fullname都不在该Schema的字段列表中,因此全部被丢弃,仅company_name被正常保存。

修复步骤

  1. 按上方说明修正模型文件的导出规则
  2. 在users.js路由中正确引入Users模型,示例:
// 替换为你实际的模型文件路径
const { Users } = require('../models/你的模型文件名');
  1. 额外确认app.js中已配置JSON解析中间件(Express 4.16+内置该能力),否则req.body无法正常获取请求参数:
app.use(express.json())

验证方法

你可以在路由的保存逻辑前添加打印,确认参数和实例的赋值状态:

router.post('/', function (req, res) {
  // 打印请求参数,确认是否正常解析到所有字段
  console.log('请求参数:', req.body)
  var newReg = new Users();
  newReg.username = req.body.username;
  newReg.company_name = req.body.company_name;
  newReg.password = req.body.password;
  newReg.fullname = req.body.fullname;
  // 打印待保存实例,确认所有字段是否正常赋值
  console.log('待保存实例:', newReg)
  // 原有保存逻辑
  newReg.save(function(err,Users){
    if(err){
      res.send('Error registering User');
    }else{
      res.send(Users);
    }
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:24:06