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

如何判断Node.js POST请求数据是从stream读取还是req.body获取

解答

你可以根据你的配置选择以下两种判断条件:

方案1:直接判断req.body是否存在

如果你已经配置了body-parser中间件,它会将解析完成的请求体挂载到req.body属性上,未经过解析的请求req.body为undefined,直接填入以下条件即可:

typeof req.body !== 'undefined'

注意:如果你全局挂载了body-parser,所有请求的req.body都会被默认赋值为空对象{},此时可以把条件替换为Object.keys(req.body).length > 0,但该写法会把请求体本身为空对象的场景误判为未解析,更推荐使用方案2。


方案2:按请求Content-Type判断(更稳定)

Express内置了req.is()方法可以匹配请求的Content-Type,你可以指定只有JSON、表单格式的请求走已解析的req.body,其余类型直接读取流,条件写为:

req.is(['json', 'urlencoded'])

该方案逻辑更可控,也能避免body-parser提前消费请求流导致读流分支失效的问题。

补充注意

你提供的参考代码里读流部分存在逻辑问题:end事件没有回调参数,不需要在end回调里累加buffer,直接用之前拼接的data变量解析即可。
另外不要全局挂载body-parser,否则所有请求的流都会被提前消费,读流分支永远不会触发。你可以将body-parser设为路由级中间件,或者配置skip参数跳过不需要解析的请求。

内容的提问来源于stack exchange,提问作者Krunal Sonparate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:21:03