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.pswp.cn/bicheng/92052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 学习教程,从入门到精通,Vue 3 内置属性语法知识点及案例代码(25)

Vue 3 内置属性语法知识点及案例代码 Vue 3 提供了丰富的内置属性,帮助开发者高效地构建用户界面。以下将详细介绍 Vue 3 的主要内置属性,并结合详细的案例代码进行说明。每个案例代码都包含详细的注释,帮助初学者更好地理解其用法。1. data …

机器学习基石:深入解析线性回归

线性回归是机器学习中最基础、最核心的算法之一,它为我们理解更复杂的模型奠定了基础。本文将带你全面解析线性回归的方方面面。1. 什么是回归? 回归分析用于预测连续型数值。它研究自变量(特征)与因变量(目标&#xf…

OneCodeServer 架构深度解析:从组件设计到运行时机制

一、架构概览与设计哲学1.1 系统定位与核心价值OneCodeServer 作为 OneCode 平台的核心服务端组件,是连接前端设计器与后端业务逻辑的桥梁,提供了从元数据定义到应用程序执行的完整解决方案。它不仅是一个代码生成引擎,更是一个全生命周期管理…

Jwts用于创建和验证 ​​JSON Web Token(JWT)​​ 的开源库详解

Jwts用于创建和验证 ​​JSON Web Token(JWT)​​ 的开源库详解在 Java 开发中,提到 Jwts 通常指的是 ​​JJWT(Java JWT)库​​中的核心工具类 io.jsonwebtoken.Jwts。JJWT 是一个专门用于创建和验证 ​​JSON Web To…

如果发送的数据和接受的数据不一致时,怎么办?

那ART4222这个板卡举例,我之间输入一个原始数据“6C532A14”,但是在选择偶校验时,接收的是“6C532B14”,我发送的码率(运行速度)是100000,但接受的不稳定,比如;“100100.…

ISCC认证:可持续生产的新标杆。ISCC如何更快认证

在全球可持续发展浪潮中,ISCC(国际可持续与碳认证)体系已成为企业绿色转型的重要工具。这一国际公认的认证系统覆盖农业、林业、废弃物处理等多个领域,通过严格的可持续性标准、供应链可追溯性要求和碳排放计算规范,建…

想对学习自动化测试的一些建议

Python接口自动化测试零基础入门到精通(2025最新版)接触了不少同行,由于他们之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的人。 本人从事软件自动化测试已经近5年,从server端到web…

电子电气架构 ---智能电动汽车嵌入式软件开发过程中的block点

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

createAsyncThunk

下面,我们来系统的梳理关于 Redux Toolkit 异步操作:createAsyncThunk 的基本知识点:一、createAsyncThunk 概述 1.1 为什么需要 createAsyncThunk 在 Redux 中处理异步操作(如 API 调用)时,传统方法需要手…

STM32F103C8T6 BC20模块NBIOT GPS北斗模块采集温湿度和经纬度发送到EMQX

云平台配置 访问下载页面:免费试用 EMQX Cloud 或 EMQX Enterprise | 下载 EMQX,根据需求选择对应版本下载。将下载的压缩包上传至服务器(推荐存放于C盘根目录,便于后续操作),并解压至指定路径&#xff08…

YOLO11涨点优化:自研检测头, 新创新点(SC_C_11Detect)检测头结构创新,实现有效涨点

目标检测领域迎来重大突破!本文揭秘原创SC_C_11Detect检测头,通过空间-通道协同优化与11层深度结构,在YOLO系列上实现mAP最高提升5.7%,小目标检测精度暴涨9.3%!创新性结构设计+即插即用特性,为工业检测、自动驾驶等场景带来革命性提升! 一、传统检测头的三大痛点 在目…

OSCP 考试期间最新考试政策

根据 Offensive Security 官方最新考试政策(2025 年 7 月),OSCP 考试期间禁止或严格限制以下工具与行为: 一、绝对禁止使用的工具/服务 类别举例说明商业/付费版本Metasploit Pro、Burp Suite Pro、Cobalt Strike、Canvas、Core …

如何基于MQ实现分布式事务

文章目录1.可靠消息最终一致性1.1 本地消息表1.1.1 本地消息表的优缺点1.消息堆积,扫表慢2.集中式扫表,会影响正常业务3.定时扫表的延迟问题1.1.2 本地消息表的代码实践1.表结构设计2.具体业务实现1.2 事务消息1.2.1 事务消息的三个阶段阶段1&#xff1a…

ARM学习(45)AXI协议总线学习

笔者来介绍一下ARM AMBA 总线中的AXI协议 1、简介 ARM 公司推出的AMBA 总线(Advanced Microcontroller Bus Architecture) ,目前已经推出到AMBA5版本。主要包括 APB:Advanced Peripheral Bus,针对外设 AHB:Advanced High-Performance Bus,高性能总线,支持64/128 位多管…

Visual C++与HGE游戏引擎:创建伪2.5D斜45度视角游戏

本文还有配套的精品资源,点击获取 简介:本教程专注讲解如何结合Visual C和HGE游戏引擎构建一个斜45度视角的伪2.5D游戏世界。HGE提供了DirectX的接口,简化了图形和音频处理,使得开发者可以专注于游戏逻辑和视觉效果的实现。教程…

打造个人数字图书馆:LeaNote+cpolar如何成为你的私有化知识中枢?

文章目录前言1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装cpolar内网穿透4. 固定Leanote蚂蚁笔记公网地址前言 在信息爆炸的时代,如何系统管理知识资产并实现价值输出?蚂蚁笔记(Leanote)提供了一种全新解决方案。这款开…

[特殊字符]️ 整个键盘控制无人机系统框架

🎯 五大核心模块详解1. 📥 输入处理模块keyboard_control_node ├── 功能:捕获键盘输入并转换为ROS消息 ├── 文件:keyboard_control.cpp ├── 输入:键盘按键 (W/A/S/D/R/F/Q/E/L/ESC) ├── 输出:g…

机器学习第三课之逻辑回归(三)LogisticRegression

目录 简介 1.下采样 2.过采样 简介 接上两篇篇博客最后,我们使用了K折交叉验证去寻找最合适的C值,提升模型召回率,对于选取C的最优值,我们就要把不同C值放到模型里面训练,然后用验证集去验证得到结果进行比较&#x…

1.Java语言有什么特点

1.Java语言有什么特点 1.面向对象编程,拥有封装,继承和多态的特性,所有可以很好的设计出低耦合的项目工程。 2.很好的可移植性,在Java中有java虚拟机(JVM)的支持,每写一个类都是.Class文件。J…

部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群

✅ 适用版本:Elasticsearch 8.2.2 Kibana 8.2.2 一、环境准备 组件版本示例地址Elasticsearch8.2.2192.168.130.61:9200, 192.168.130.62:9200, 192.168.130.65:9200Kibana8.2.2部署在 192.168.130.651操作系统CentOS 7⚠️ 严格版本匹配:Kibana 8.2.2…