request请求相关

import qs from "qs"; 的作用是引入 qs 库,用于处理 URL 查询字符串的解析和序列化。它在 HTTP 请求中非常有用,尤其是在需要将复杂数据转换为 URL 编码格式时。


1. application/json;charset=utf-8

特点

请求体是一个 JSON 格式的字符串。

数据以键值对的形式组织,支持嵌套结构和复杂数据类型(如数组、对象)。

通常与 JSON.stringify(data) 配合使用,将 JavaScript 对象转换为 JSON 字符串。

使用场景

适用于需要传递复杂数据的接口,比如:

提交表单数据时,字段较多或包含嵌套结构。

后端接口明确要求 JSON 格式的请求体。

示例代码

Javascript

复制代码
1. headers: { 'Content-Type': 'application/json;charset=utf-8' },
2. data: JSON.stringify(data), // 将对象转换为 JSON 字符串

2. application/x-www-form-urlencoded

特点

请求体是一个 URL 编码的字符串,格式为 key1=value1&key2=value2 。

数据以键值对的形式组织,但不支持嵌套结构。

通常与 qs.stringify(data) 配合使用,将对象转换为 URL 编码的字符串。

使用场景

适用于传统的表单提交,比如:

提交简单的键值对数据。

后端接口要求表单格式的数据。

示例代码

Javascript

复制代码
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: qs.stringify(data), // 将对象转换为 URL 编码的字符串

总结

application/json :用于复杂数据,支持嵌套结构,通常与 JSON.stringify 配合使用。

application/x-www-form-urlencoded :用于简单键值对数据,通常与 qs.stringify 配合使用。

具体使用哪种格式取决于后端接口的设计要求


3.'Content-Type':'multipart/form-data'

  1. 核心特点

Content-Type: multipart/form-data :

这是专门用于文件上传的 HTTP 请求头格式。

支持将文件数据和其他表单字段(如文本参数)一起传输。

data 参数:

通常是一个 FormData 对象,用于封装文件和其他字段。

例如:

Javascript

  1. const formData = new FormData();

  2. formData.append('file', file); // 文件对象

  3. formData.append('description', '图片介绍'); // 附加文本字段

  4. 典型应用场景

(1) 图片上传

示例:用户上传风险事件的现场图片。

流程:

前端通过 <input type="file"> 获取文件。

将文件包装为 FormData 。

调用 xxapi(formData) 上传到后端。

(2) 多文件或混合数据上传

示例:上传图片的同时附带文本描述或元数据。

代码:

Javascript

  1. const formData = new FormData();

  2. formData.append('images', file1); // 文件1

  3. formData.append('images', file2); // 文件2

  4. formData.append('comment', 'xx'); // 文本字段

  5. riskUploadImage(formData);

(3) 兼容性场景

老式表单提交:如果后端接口要求兼容传统表单文件上传(如某些遗留系统), multipart/form-data 是标准方式。

  1. 为什么用 multipart/form-data ?

文件支持:普通 JSON 或 URL 编码格式无法直接传输二进制文件。

分块传输:大文件会被分块传输,避免内存溢出。

字段混合:可以同时传递文件和非文件字段(如 userId 、 timestamp )。

  1. 注意事项

FormData 对象:

必须使用 new FormData() 构造,不能直接传递普通对象。

文件需通过 append 方法添加。

后端处理:

后端需支持解析 multipart/form-data (如使用 multer (Node.js)或 MultipartFile (Spring Boot))。

边界问题:

multipart/form-data 会自动生成边界分隔符(如 ------WebKitFormBoundaryxxx ),无需手动设置

总结

何时用:需要上传文件(如图片、文档)或混合文件与非文件数据时。

关键点:

使用 FormData 封装文件。

设置 Content-Type: multipart/form-data 。

后端需支持对应解析逻辑。


qs.stringify(data)和JSON.stringify(data) 一样不?

qs.stringify(data) 和 JSON.stringify(data) 是两种完全不同的序列化方法,它们的作用和输出结果有显著区别。以下是它们的对比:

  1. JSON.stringify(data)

作用

将 JavaScript 对象转换为 JSON 格式的字符串。

JSON 是一种轻量级的数据交换格式,支持复杂数据结构(如嵌套对象、数组等)。

输出示例

Javascript

  1. const data = { name: "John", age: 30, hobbies: ["reading", "coding"] };

  2. const jsonStr = JSON.stringify(data);

3.// 输出: '{"name":"John","age":30,"hobbies":["reading","coding"]}'

特点

保留数据的完整结构(包括嵌套字段和数组)。

适用于需要传递复杂数据的场景(如 REST API 的 application/json 请求)。

不支持 URL 编码,直接输出标准的 JSON 字符串。

使用场景

当后端接口要求 Content-Type: application/json 时使用。

例如:

Javascript

  1. headers: { 'Content-Type': 'application/json' },

  2. data: JSON.stringify(data),

  3. qs.stringify(data)

作用

将 JavaScript 对象转换为 URL 编码的查询字符串。

主要用于表单提交或 URL 查询参数。

输出示例

Javascript

  1. const data = { name: "John", age: 30, hobbies: ["reading", "coding"] };

  2. const queryStr = qs.stringify(data);

  3. // 默认输出: 'name=John&age=30&hobbies[0]=reading&hobbies[1]=coding'

  4. // 如果配置 { arrayFormat: 'comma' }: 'name=John&age=30&hobbies=reading,coding'

特点

将数据转换为 key=value 的形式,用 & 连接。

支持配置数组的序列化方式(如逗号分隔、索引等)。

适用于 Content-Type: application/x-www-form-urlencoded 的请求。

使用场景

当后端接口要求 Content-Type: application/x-www-form-urlencoded 时使用。

例如:

Javascript

  1. headers: { 'Content-Type': 'application/x-www-form-urlencoded' },

  2. data: qs.stringify(data, { arrayFormat: 'comma' }),

相关推荐
天天打码10 分钟前
Svelte-无虚拟DOM、极致性能的现代高性能Web开发框架!
前端·node.js·vue·svelte
0思必得018 分钟前
[Web自动化] Selenium元素定位
前端·python·selenium·自动化·html
EEEzhenliang44 分钟前
CSS知识概括、总结
前端·css
大阳光男孩1 小时前
ElementUI表格懒加载子级更新数据刷新不生效问题
前端·javascript·elementui
wy3136228211 小时前
C#——意框架(结构说明)
前端·javascript·c#
研☆香1 小时前
JS中的三种显示弹窗
开发语言·前端·javascript
俩毛豆1 小时前
HarmonyOS APP开发-一文讲清使用Web组件加载网页的三种方法-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
前端·华为·harmonyos
猛扇赵四那边好嘴.1 小时前
Flutter 框架跨平台鸿蒙开发 - 问答社区应用开发教程
开发语言·javascript·flutter·华为·harmonyos
C_心欲无痕1 小时前
Next.js 路由系统对比:Pages Router vs App Router
开发语言·前端·javascript
LawrenceLan1 小时前
Flutter 零基础入门(二十二):Text 文本组件与样式系统
开发语言·前端·flutter·dart