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被正常保存。
修复步骤
- 按上方说明修正模型文件的导出规则
- 在
users.js路由中正确引入Users模型,示例:
// 替换为你实际的模型文件路径 const { Users } = require('../models/你的模型文件名');
- 额外确认
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
相关产品推荐
相关产品推荐

