Node.js Fetch发送POST请求返回400错误的原因排查
问题解决:POST单个JSON整数触发400 Bad Request
问题核心
发送仅包含单个整数的JSON格式POST请求时,返回400错误,后端updateVisits()函数从未执行;但将数据改为JSON对象或纯文本格式时请求正常,同项目的GET请求无异常。
原因分析
后端使用的JSON解析中间件(如Express的express.json())默认开启strict: true配置,该配置会拒绝顶层非对象类型的JSON值(单个数字、字符串、布尔值等),导致请求在进入业务处理函数前就被中间件拦截,返回400错误。
解决方案
方案1:修改后端JSON中间件配置
在后端启动代码中,调整express.json()的配置,关闭strict模式:
// 替换原有的app.use(express.json()); app.use(express.json({ strict: false }));
此配置允许中间件解析顶层的数字、字符串等JSON值,请求可正常进入updateVisits()函数,此时后端可通过req.body直接获取到该整数。
方案2:前端调整请求数据格式
将单个整数包装为JSON对象发送,例如:
// 原本的data是单个整数,现在改为对象 siteData.myPost("/UpdateSiteVisits", { id: 123 });
后端updateVisits()函数中通过req.body.id获取该整数即可,此方式更符合常规API设计规范。
内容的提问来源于stack exchange,提问作者quilkin
相关产品推荐
相关产品推荐

