Node.js/express服务端无法获取客户端POST请求body的问题求助
问题解决方法
按以下步骤排查即可解决该问题:
- 首先确认
express.json()中间件注册位置优先于所有POST路由,推荐全局注册,不要只挂载在单个POST路由下。同时需要注意,如果你的前端运行端口和express端口不一致(比如React默认跑在3000,express跑在5000),必须配置CORS跨域处理,否则预检请求拦截会导致POST参数无法正常传递到服务端:
const express = require("express"); const app = express(); // 全局注册JSON解析中间件,必须放在所有路由前面 app.use(express.json()) // 配置CORS解决跨域问题 const cors = require('cors') app.use(cors()) app.post("/post", function (req,res){ console.log(req.body) // 必须给请求返回响应,否则前端请求会挂起,也可能影响后续请求的参数传递 res.send('ok') }) const port = 5000; // 原listen回调没有加console.log,启动日志不会正常打印,此处补上即可 app.listen(port, () => console.log(`Server running on port ${port}`));
- 如果你没有安装cors依赖,先执行安装命令:
npm install cors - 跨域场景下可以在前端fetch请求中补充credentials配置,避免请求头被拦截:
fetch("/post", { method: "POST", headers: { "Content-Type": "application/json" }, credentials: 'include', body: JSON.stringify(data) })
- 如果你是直接打开本地HTML文件(file协议访问)而不是通过静态服务访问,也会出现请求参数丢失的问题,建议把前端代码放在express的静态资源目录下托管:
// 新增静态资源托管,把html文件放在项目根目录的public文件夹下即可访问 app.use(express.static('public'))
内容的提问来源于stack exchange,提问作者imback0526
相关产品推荐
相关产品推荐

