当前位置: 首页 > news >正文

curl发送文件bodyParser无法获取请求体的问题分析

问题及现象

开发过程使用curl+PUT方式发送少量数据, 后端使用NodeJS+express框架+bodyParser,但测试发现无法获取到请求体内容,现象表现为req.body 为空对象 {}
代码如下:

const bodyParser = require('body-parser');
router.use('/api/1', bodyParser.raw({limit: '10mb', type: '*/*'})); //中间件处理
router.put('/api/1', (req,res,next)=>{console.log(req.body); //输出为{}res.send('OK');})

使用curl -T 1.log http://127.0.0.1:8080/api/1 测试

curl -T 1.log http://127.0.0.1:8080/api/1 

手动接收并打印请求体, 是能正常得到的,

router.put('/api/2', (req,res,next)=>{console.log(req.headers); //输出请求头信息console.log(req.pipe(process.stdout)); //正常输出res.send('OK');})

问题原因

经定位发现, curl默认使用put上传文件时, 默认不发送Content-Type, 而bodyParser判定type的依据是Content-Type匹配, 故此种情况下实际上中间件并没有执行, req.body为空;

解决方法

方案1 curl发送时增加Content-Type

curl -T 1.log -H 'Content-Type:text/plain' http://127.0.0.1:8080/api/1 

后端代码无需修改;

方案2 后端服务兼容这种不带Content-Type的请求

router.use('/api/1', bodyParser.raw({limit: '10mb', type: ()=>true})); //中间件处理, 自定义type的判定函数,直接返回true
http://www.lryc.cn/news/609941.html

相关文章:

  • Stanford CS336 assignment1 | Byte-Pair Encoding (BPE) Tokenizer
  • NeoBase:一款开源、基于AI的数据库管理助手
  • 《Python 实用项目与工具制作指南》· 2.2 变量
  • Java中给List<T> 对象集合去重
  • golang的数组
  • SpringMVC 6+源码分析(三)DispatcherServlet实例化流程 2--(url 与contrller类如何进行映射)
  • 【Spring AI快速上手 (一)】ChatModel与ChatCilent构建对话
  • 小鹏汽车前端面经
  • Python+QT开发环境搭建
  • 数据从mysql迁移到postgresql
  • 纯前端导出Excel
  • MCP安全机制深度剖析:权限控制与数据保护最佳实践
  • 体验Java接入langchain4j运用大模型OpenAi
  • 学习游戏制作记录(角色属性和状态脚本)8.4
  • 多源异构信号同步采集与赛道数据融合技术解析
  • 迅为RK3568开发板OpeHarmony学习开发手册-修改调试串口波特率
  • codeBuddy IDE 使用教程
  • 零售行业线上线下融合趋势,华为云智能零售解决方案,在门店运营与电商业务中的技术应用与场景实践
  • Qt 自动无法加载数据库为空
  • SP20D120CTR碳化硅二极管详解:高性能与广泛应用
  • 最小二乘法MSE
  • 嵌入式开发学习———Linux环境下IO进程线程学习(三)
  • AtCoder Beginner Contest 416 C 题
  • 同质无向加权图:理论基础、算法演进与应用前沿
  • 张宇高数基础30讲与1000题学习笔记(第4-6章)
  • Node.js高并发接口下的事件循环卡顿问题与异步解耦优化方案
  • Lego-Loam TransformToStartIMU TransformToStart TransformToEnd的区别
  • 时序数据库如何高效处理海量数据
  • Node.js(四)之数据库与身份认证
  • Python 数据科学与可视化工具箱 - 数组形状操作:reshape(), flatten()