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

Express.js配置body-parser后req.body仍为undefined的问题

问题解决:req.body undefined 且请求数据未存入数据库

核心问题分析

  1. 请求体解析中间件未生效:你在控制器文件中新建了独立的Express实例并注册body-parser,但实际运行的服务是index.js里创建的Express实例,导致解析请求体的中间件完全没作用。
  2. 模型实例创建错误:控制器中project.save()的project变量未定义,也没有用请求体数据创建Projects模型的实例,直接调用save会生成空数据条目。

具体修改步骤

1. 迁移请求体解析逻辑到index.js

Express 4.16+已内置body-parser功能,无需单独依赖,直接在index.js中添加解析中间件:

require('dotenv').config()
const express = require('express');
const {MongoConnect} = require("./config")
const app = express();
const port = process.env.MONGO_PORT;
const cors = require("cors");

// Middleware setup
app.use(cors());
// 用Express内置方法解析JSON和表单数据
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

MongoConnect().then(()=>console.log("MongoDB connected"));
const userRouterProjects = require('./routes/Projects')

app.use("/api",userRouterProjects);

app.listen(port,()=>console.log(`Server is running on port ${port}`));

同时删除控制器文件中多余的Express实例和body-parser注册代码。

2. 修复控制器的创建项目逻辑

修改handleCreateProject函数,正确创建模型实例并传入请求体数据:

const Projects = require("../models/Projects");

// Route handlers
const handleCreateProject = async (req, res) => {
try {
console.log("req.body", req.body);
// 用请求体数据创建Projects模型实例
const project = new Projects(req.body);
const result = await project.save();
res.status(201).send(result);
console.log("Project successfully added");
} catch (error) {
console.error("Error saving project:", error);
res.status(500).send({ error: "Failed to save project" });
}
};

const handleGetAllProjects = async (req, res) => {
try {
const projects = await Projects.find({});
if (projects.length > 0) {
res.send(projects);
} else {
res.send({ result: "No projects found" });
}
} catch (error) {
console.error("Error fetching projects:", error);
res.status(500).send({ error: "Failed to fetch projects" });
}
};

module.exports = {
handleCreateProject,
handleGetAllProjects,
};

3. 验证修改效果

重启服务后,用Postman发送POST请求(确保Content-Type: application/json),此时req.body能正常获取到数据,数据库中也会正确存入name和description字段。

内容的提问来源于stack exchange,提问作者Sahil Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:35:36