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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
目录
打赏
0
0
0
0
45
分享
相关文章
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
174 65
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
前端解决axios请求的跨域问题【2步完成】
本文介绍如何通过前端配置解决跨域问题,主要针对Vue项目中的`vite.config.js`文件进行修改。作者在联调过程中遇到跨域报错
164 1
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
161 0
Next.js 实战 (六):如何实现文件本地上传
|
9月前
|
Node.js GET/POST请求
10月更文挑战第6天
87 2
Node.js GET/POST请求
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
129 2
|
9月前
|
axios的get请求传入数组参数
【10月更文挑战第11天】 当使用 `axios` 发送包含数组参数的 GET 请求时,默认的序列化方式可能与后端(如 Django)不兼容,导致无法正确获取数组参数。解决方案是通过 `paramsSerializer` 指定自定义序列化函数,或使用 `qs` 库来格式化数组参数,确保前后端一致。示例代码展示了如何使用 `qs` 库设置 `arrayFormat` 为 `&quot;repeat&quot;`,以符合 Django 的解析要求。
321 2
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
109 0
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
579 0
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
499 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问