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

Express服务器无法接收浏览器PUT请求体,REST客户端可正常工作

解决思路

1. 检查Fetch请求的Content-Type头

Express的express.json()(或旧版的body-parser)只会解析Content-Type为application/json的请求体。浏览器端用fetch发送JSON时,不会自动添加这个请求头,但REST客户端(如Insomnia)会自动补上。

你需要在fetch的配置里显式设置该请求头:

fetch('/job/like', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json', // 必须添加这个关键头
    // 若有认证需求,别忘了带上Authorization等相关头
  },
  body: JSON.stringify({ id: 865058, turnon: false })
})

2. 确认Express的JSON解析中间件配置

尽管POST请求正常,仍需确认你的Express应用是否全局配置了JSON解析中间件,且未对PUT方法做特殊限制:

// 务必在所有路由之前添加这个中间件
app.use(express.json());
// 如需处理较大请求体,可设置大小限制
// app.use(express.json({ limit: '10mb' }));

注意:不要重复配置express.json()和body-parser.json(),二者功能一致,重复配置可能导致异常。

3. 排查中间件是否拦截请求体

检查authed或catchErrors这类自定义中间件,是否在处理PUT请求时意外修改或清空了req.body。可以临时注释这些中间件,直接测试路由是否能获取到请求体,以此定位是否为中间件的问题。

4. 验证浏览器请求的实际发送内容

在浏览器开发者工具的「网络」面板中,查看PUT请求的细节:

  • 确认Content-Type请求头是否为application/json
  • 确认请求体格式正确,没有被转义、截断或异常编码

内容的提问来源于stack exchange,提问作者Maddy Guthridge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:13:17