You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MEAN栈提交表单后MongoDB仅存ObjectId和__v:0无书籍数据问题

问题根源

你代码的核心错误是Express后端错误从req.params读取POST请求数据,前端通过POST请求提交的表单数据实际存储在req.body对象中。

修复步骤

  1. 先确认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,同样无法读取到前端提交的数据。

  1. 修正后端路由代码,将所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:02