使用Mongoose向MongoDB插入表单数据时字段缺失异常排查
问题:Mongoose插入数据时product_Description字段缺失的原因及解决办法
你遇到的问题其实很典型——JavaScript的大小写敏感性导致的字段不匹配。
从你提供的日志就能直接找到根源:
console.log(req.body); { product_Name: 's', product_description: 'ydtdh', product_price: '232', product_logo: 'error.png' }console.log(newproduct) { _id: 5a6ffc303df3d62e0451dd12, product_Name: 's', product_price: 232, product_logo: 'error.png' }
前端表单提交过来的描述字段是product_description(注意是小写的d),但你在创建newproduct实例的时候,试图读取的是req.body.product_Description(大写的D)。在JavaScript里,这两个是完全不同的对象属性名,所以后端自然读不到这个字段的值,最终插入数据库时就会缺失。
解决办法(二选一即可)
- 修改后端代码,适配前端的字段名
把创建实例时的字段读取语句改成和前端一致的小写d:
var newproduct = new product({ product_Name : req.body.product_Name , product_Description : req.body.product_description , // 这里改为匹配前端的字段名 product_price : req.body.product_price, product_logo : req.body.product_logo });
- 修改前端表单,适配后端的Schema定义
如果你希望保持后端Schema的命名风格,可以调整前端表单中对应输入框的name属性,从product_description改为product_Description,这样后端就能直接用req.body.product_Description获取到值了。
小提示
JavaScript对变量、对象属性的大小写是严格区分的,前后端交互时一定要保证字段名的大小写完全一致,不然很容易出现这种“明明传了值却读不到”的问题~
内容的提问来源于stack exchange,提问作者codefreaK
相关产品推荐
相关产品推荐

