若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param

资源链接:

https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5OTgxOTg0Ng==&action=getalbum&album_id=2441331662295973890&uin=&key=&devicetype=Windows+11+x64&version=63090b11&lang=zh_CN&ascene=7&session_us=gh_c7592ce20720

原文链接:

https://mp.weixin.qq.com/s?__biz=Mzg5OTgxOTg0Ng==&mid=2247483785&idx=1&sn=3dca2cb382d194c31c7e4a6dcb8a7dae&chksm=c04c31a0f73bb8b688b1c1f8d5e3912c68cc320d9b9490c2602922058361a9c1df5a8bab34e6&scene=178&cur_album_id=2441331662295973890&poc_token=HKSJd2ajf2cJuaeZKBL_9mfpbBvWUyUJz6GdQK0z

前端对axios的封装理解和基本使用    

ruoyi的前端对axios进行了封装,让我们发get请求或者是post请求更加方便了。

ruoyi对axios的封装在下面文件中:

打开文件,可以看到它有三个显眼的方法,分别是request拦截器、response拦截器和通用下载方法。

request拦截器

Get请求

request拦截器对我们发送的请求进行了封装,当我们发送Get请求,那么我们携带参数的时候应该用param。,对应下面的源码。
 
// get请求映射params参数
if (config.method === 'get' && config.params) {
 let url = config.url + '?' + tansParams(config.params);
 url = url.slice(0, -1);
 config.params = {};
 config.url = url;
}

通过此这简单的代码,可以让get请求自动变为我们熟悉的形式[http://xxxxx:port/aaa?key1=value1&key2=value2]。如需要详细了解,同学们可以利用单元测试的方法测试即可。

来看一个get请求的案例:

// 获取验证码 不带参数
export function getCodeImg() {
 return request({
   url: '/captchaImage',
   headers: {
     isToken: false
   },
   method: 'get',
   timeout: 20000
 })
}
 
 
 
// 查询在线用户列表 带参数
export function list(query) {
 return request({
   url: '/monitor/online/list',
   method: 'get',
   params: query
 })
}

当我们查看在线用户的时候:发现确实用的param,而且确实请求变成了http://xxxxx:port/aaa?key1=value1&key2=value2的样子,江哥你没有骗我:

话说回来,这个在线用户的功能怎么实现的呢?

直接告诉大家结论:ruoyi的在线用户存在redis中的,每次一个人登录,就会把他的登录信息存在redis中,当我们去查询在线用户,无非就是去redis中取一下有哪一些用户罢了!

具体而言,它使用redis的查询巧妙实现的(视频中debug),详细见视频。

我们还发现登录人具有一个TTL(保持登录状态的有效期),还发现登录人具有他的许许多多的信息......

Post

Post请求带参数使用data。

具体代码也差不多:

if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
 const requestObj = {
   url: config.url,
   data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
   time: new Date().getTime()
 }
 const sessionObj = cache.session.getJSON('sessionObj')
 if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
   cache.session.setJSON('sessionObj', requestObj)
 } else {
   const s_url = sessionObj.url;                  // 请求地址
   const s_data = sessionObj.data;                // 请求数据
   const s_time = sessionObj.time;                // 请求时间
   const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
   if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
     const message = '数据正在处理,请勿重复提交';
     console.warn(`[${s_url}]: ` + message)
     return Promise.reject(new Error(message))
   } else {
     cache.session.setJSON('sessionObj', requestObj)
   }
 }
}

响应拦截器

用于每一个响应的拦截过滤处理。

对不同状态码进行判断给出处理逻辑,并不是特别重要。

资料来源:

这里有一个request拦截器,request请求又涉及到GET请求和POST请求

发请求分为POST请求和GET请求

若依发送GET请求,必须用param

通过这行代码自动将请求转换成这种形式

不带参数

带了一个参数

若依在axios中首先创建了一个axios实例

之后对GET请求做了一个特殊处理,拼接字符串


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
47 0
|
2月前
|
缓存 JavaScript 搜索推荐
|
2月前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
42 2
Node.js GET/POST请求
|
1月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
54 2
|
1月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
37 0
|
2月前
|
Python
axios的get请求传入数组参数
【10月更文挑战第11天】 当使用 `axios` 发送包含数组参数的 GET 请求时,默认的序列化方式可能与后端(如 Django)不兼容,导致无法正确获取数组参数。解决方案是通过 `paramsSerializer` 指定自定义序列化函数,或使用 `qs` 库来格式化数组参数,确保前后端一致。示例代码展示了如何使用 `qs` 库设置 `arrayFormat` 为 `&quot;repeat&quot;`,以符合 Django 的解析要求。
88 2
|
2月前
|
JSON JavaScript 前端开发
axios的post请求,数据为什么要用qs处理?什么时候不用?
axios的post请求,数据为什么要用qs处理?什么时候不用?
|
2月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
145 0
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
189 0
|
2月前
|
资源调度 JavaScript