MEAN栈中使用Mongoose连接MongoDB及数据插入失败求助
解决Mongoose连接MongoDB后
.save()无法插入文档的问题 我帮你排查下代码里的几个关键问题,这些应该就是导致你调用.save()后数据库无数据的核心原因:
1. POST接口中提前发送响应,导致save()逻辑根本没执行
你在POST /DNZ/FA的处理函数里,先写了这行代码:
res.send(JSON.stringify(req.body));
这行代码会立即结束HTTP响应,后续创建FA实例、调用fa.save()的代码完全不会被执行!这是最影响功能的问题,你需要把这行代码删掉或者注释掉,让保存逻辑能正常运行。
2. 检查Mongoose模型与请求字段的匹配性
你目前只设置了fa.name = req.body.name,但如果你的FA模型里没有定义name字段,或者字段的类型/验证规则不满足,Mongoose会默认静默丢弃不匹配的字段(默认strict: true配置),最终导致保存后数据库里没有数据。
比如你的./models/DNZmodels/FA.js模型文件应该类似这样,确保字段和你要保存的内容一致:
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const FASchema = new Schema({ name: { type: String, required: true }, // 这里添加你需要的其他字段,比如Timestamp、PrognostizierterBetriebswert等 }); module.exports = mongoose.model('FA', FASchema);
3. 确认数据库连接是否真的成功
你已经监听了数据库连接的事件,启动服务时可以确认控制台是否打印了DB connection alive:
- 如果没打印,说明Mongoose和MongoDB的连接没建立成功,检查下本地MongoDB的端口是否默认27017,或者连接字符串是否有误(比如你写的
mongodb://localhost/DNZ,确保拼写正确)。 - 如果有连接错误日志,根据提示排查即可。
4. 顺带修复路由参数的错误(影响GET接口)
在/FA/:FA_id的GET路由里,你错误地使用了req.params.bear_id,但路由参数明明是FA_id,会导致找不到对应文档,改成下面这样:
FA.findById(req.params.FA_id, function(err, fa) { if (err) res.send(err); res.json(fa); });
修复后的POST接口示例
把多余的响应代码删掉,确保保存逻辑正常执行:
.post(function(req, res) { var fa = new FA(); fa.name = req.body.name; console.log("Hier erscheint var fa:", fa); fa.save(function(err) { if (err) { console.log(err); return res.status(400).send(err); } console.log("debug"); res.status(200).json({ message: 'FA created!' }); }); })
另外,建议你保留save回调里的错误日志,这样如果遇到字段验证失败、权限问题等错误,能直接在控制台看到具体原因,方便快速排查。
内容的提问来源于stack exchange,提问作者MarcL
相关产品推荐
相关产品推荐

