当前位置: 首页 > 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.xdnf.cn/news/1243027.html

相关文章:

  • 嵌入式硬件中三极管推挽电路控制与实现
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • (论文速读)Text-IF:基于语义文本引导的退化感知交互式图像融合方法
  • sqli-labs-master/Less-31~Less-40
  • openeuler离线安装软件
  • Hexo - 免费搭建个人博客07 - 添加右上角的“目录”
  • 先知模型或者说从容的模型
  • Linux—yum仓库及NFS网络共享服务
  • Java基础-斗地主游戏
  • opencv引入libavif
  • 从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • 【慕伏白】Android Studio 配置国内镜像源
  • 内联函数:提升效率的空间换时间艺术
  • FreeRTOS源码分析四:时钟中断处理响应流程
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • 鸿蒙南向开发 编写一个简单子系统
  • 机器学习 入门——决策树分类
  • 并发编程常用工具类(下):CyclicBarrier 与 Phaser 的协同应用
  • C++入门自学Day6-- C++模版
  • 飞算JavaAI需求转SpringBoot项目沉浸式体验
  • 【BUUCTF系列】[极客大挑战 2019]LoveSQL 1
  • vllm启动Qwen/Qwen3-Coder-30B-A3B-Instruct并支持工具调用
  • MLIR Introduction
  • android内存作假通杀补丁(4GB作假8GB)
  • History 模式 vs Hash 模式:Vue Router 技术决策因素详解
  • ZYNQ-按键消抖
  • JavaScript 中的流程控制语句详解
  • 3.JVM,JRE和JDK的关系是什么
  • 第二十四天(数据结构:栈和队列)队列实践请看下一篇