Express搭建REST API时req.body返回空对象问题求助
问题修复方案
1. 修正中间件注册顺序(核心问题)
Express 中间件按照注册顺序依次执行,你当前把 CORS 中间件注册在路由挂载之后,会导致跨域请求的预检逻辑无法正常触发,进而导致 POST 请求的请求体解析失败。
把服务端代码里的中间件顺序调整为:
// 请求解析中间件放最前 app.use(express.json()); app.use(express.urlencoded({ extended:true })); // CORS 中间件放在路由之前 app.use(cors({ origin: '*', methods: "GET, POST, PUT, DELETE, OPTIONS", // 新增OPTIONS方法支持预检请求 optionsSuccessStatus: 200 })); // 路由放在所有全局中间件之后 app.use("/", router);
2. 确认请求头配置
确保你发送 POST 请求时,请求头的 Content-Type 字段和你传的请求体格式匹配:
- 如果传 JSON 格式的请求体,必须设置
Content-Type: application/json - 如果传表单格式(x-www-form-urlencoded),设置
Content-Type: application/x-www-form-urlencoded - 如果传 form-data 格式(包含文件上传),express 内置中间件无法解析,需要引入
multer中间件处理
3. 修复其他代码错误(避免后续运行报错)
3.1 修正模型引用错误
你的模型文件导出的是 Article,路由中创建实例时写的 new Articles() 多了个s,需要调整路由里的导入和实例化代码:
// 路由开头导入模型的代码要和导出名匹配 import Article from '../models/你的模型文件名.js' // 实例化的时候用Article const newArticle = new Article({ title: body.title, description: body.description, createdat: body.createdat, // 修正拼写错误:原代码写的craetedat createdby: body.createdby, })
3.2 修正Schema字段拼写错误
Schema 里的创建人字段现在拼写为 craetedby,是错误拼写,建议修改为 createdby 避免后续业务逻辑出错。
内容的提问来源于stack exchange,提问作者Petko Petkov
相关产品推荐
相关产品推荐

