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 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606111 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了11 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅11 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅12 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅12 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment12 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅13 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊13 小时前
jwt介绍
前端
爱敲代码的小鱼13 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax