Node.js通过Postman向MongoDB插入数据仅存_id、__v字段问题求助
问题根因与解决方案
1. 核心问题:Mongoose Schema 属性拼写错误
你在定义用户Schema时,必填校验的属性名写错了,正确的属性是required,你写成了require,这会导致Mongoose无法正确识别你声明的name、password字段规则,插入数据时会直接忽略这两个字段,只保留系统默认生成的_id和__v。
2. 可选优化:替换已废弃的body-parser用法
Express v4.16.0之后已经内置了请求体解析能力,不需要单独引入body-parser依赖,你写的bodyParser.json()确实是已废弃的写法,虽然它目前不会导致你的问题,但可以替换为更规范的内置方法。
3. 额外校验:确认Postman请求配置
要确保你在Postman中发起POST请求时,请求体选择raw格式,并且右侧的格式类型选中JSON,否则请求的Content-Type不对,Express无法正确解析参数,会导致req.body为空,也会出现你遇到的问题。
修正后的代码示例
修正后的Model代码
const mongoose = require ('mongoose'); const userSchema = mongoose.Schema({ name:{ type:String, required: true // 修正拼写,补全属性值 }, password:{ type:String, minlength:8, required: true // 修正拼写,补全属性值 } }) module.exports = mongoose.model('User', userSchema);
修正后的主代码请求解析部分
// 删掉const bodyParser = require("body-parser");以及对应的引用,替换为下面的写法 app.use(express.json()); // 内置JSON解析,功能和bodyParser.json()一致 app.use('/',router);
快速排查技巧
你可以在Controller的newUser方法第一行加一行打印console.log(req.body),如果打印结果是空对象,说明是请求解析/Postman配置的问题;如果能正常打印你传入的name和password,说明就是Schema拼写问题导致的。
内容的提问来源于stack exchange,提问作者y. h.
相关产品推荐
相关产品推荐

