MEAN栈提交表单后MongoDB仅存ObjectId和__v:0无书籍数据问题
问题根源
你代码的核心错误是Express后端错误从req.params读取POST请求数据,前端通过POST请求提交的表单数据实际存储在req.body对象中。
修复步骤
- 先确认Express服务已配置JSON请求体解析中间件,Express 4.16及以上版本内置该中间件,在项目入口文件(通常是app.js/server.js)中添加如下配置:
const express = require('express') const app = express() // 新增以下两行配置 app.use(express.json()) app.use(express.urlencoded({ extended: true }))
如果缺少该配置,req.body会默认返回undefined,同样无法读取到前端提交的数据。
- 修正后端路由代码,将所有
req.params替换为req.body:
booksRoute.route('/post').post((req,res,next)=>{ var x = { name : req.body.name, genre : req.body.genre, author : req.body.author, rating : req.body.rating, price : req.body.price } console.log(x) ; BookModel(x).save((err,doc)=>{ if (err){ console.log(err); return res.status(500).send(err) } res.send(doc) ; }) ; })
补充说明
你之前数据库只生成_id和__v字段,是因为构造的x对象所有属性都是undefined,而你的Mongoose模型中没有给字段设置required: true的必填校验,所以Mongoose会直接写入只有系统默认字段的空文档,就出现了你遇到的问题。修改后可以先查看后端控制台打印的x对象,确认字段值正常读取后再验证数据库写入结果。
内容的提问来源于stack exchange,提问作者Mohamed Ali Mani
相关产品推荐
相关产品推荐

