fetch('/v1/orders', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(payload)
});
前端用 fetch 发了 POST,body 是 JSON 字符串,后端读 request.body 拿到空对象,参数全是默认值。请求确实到了,状态码 200。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:请求没带 Content-Type,服务端按表单或查询参数解析,JSON 字符串被当成一整块没有键的原始体丢掉。有的框架只在 Content-Type 为 application/json 时才挂载 body 解析器,其他类型直接跳过。
「Content-Type 缺失」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:请求头显式写 Content-Type: application/json;用 JSON.stringify 序列化 别直接传对象;服务端对不支持的 Content-Type 返回 415 别静默当空请求处理;在网关日志里记录 Content-Type 方便定位哪一端漏了。
确认没问题再收工,后端日志里能打印出完整字段 空 body 的请求改为返回 415。
