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

本地运行正常部署到服务器后express POST接口req.body为空如何解决

问题核心原因

  • 你在client.js的fetch请求中配置了mode: 'no-cors',该模式有严格的限制:仅支持三种简单Content-Type(application/x-www-form-urlencoded、multipart/form-data、text/plain),你自定义的Content-Type: application/json会被浏览器自动删除,同时请求体无法被后端JSON解析器正确识别,最终导致req.body为空。
  • 你的Express服务没有配置跨域资源共享(CORS)中间件,仅给Socket.IO配置的CORS规则不生效于普通POST接口,跨域请求会被拦截。

解决方案

第一步:修改客户端fetch配置

删除mode : 'no-cors'这一行,修改后的client.js代码如下:

await fetch("https://example.com:30000/subscribeA", {
        method: "post",
        body: JSON.stringify({ dataSubscribe: subscription, dataNotif: dataNotif}),
        headers: {
            "Content-Type": "application/json"
        }
    });
console.log("Push Sent...");

第二步:给Express配置CORS中间件

  1. 先安装cors依赖:
    npm install cors
  2. 在index.js中引入并启用cors:
    在const bodyParser = require("body-parser");这一行后面添加以下代码:
const cors = require('cors');
app.use(cors({
  origin: '*', // 生产环境建议替换为你的前端实际域名,如'https://your-frontend.com'
  methods: ["GET", "POST"],
  credentials: true
}));

可选优化

新版本Express已经内置JSON解析能力,你可以直接用app.use(express.json())替代app.use(bodyParser.json()),无需额外安装body-parser依赖,功能完全一致。

修改完成后重启后端服务,再次发起请求就能正常获取到req.body中的数据了。

内容的提问来源于stack exchange,提问作者Hi mynameis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:18:02