VUE中获取数据方式(axios)详细介绍

news2024/9/22 20:40:47

众所周知,我们现在大多采用前后端分离的模式来开发项目,前端项目个人采用vue做的比较多一点,既然是前端,那肯定只是负责渲染展示数据,那么问题来了,数据从哪里来?开发阶段大多数据采用mock做一些假数据来满足暂时的需求,但是最终生产上的数据肯定是从后端接口获取而来。如何在vue项目上从后端获取方式呢,就是我们本章的主角--AXIOS。

一、前端从后端获取数据的方式通常采用http/https的方式

方法通常有GET、POST、PUT、DELETE、PATCH这五种;

GET==>用来获取数据,

POST==> 是用来新增数据表单提交或文件上传

DELETE==>是用来删除数据

PUT==>是用来更新数据(所有数据推送到后端)

PATCH==>是用来更新数据(只将修改的数据推送到后端)

二、从前端请求后端接口获取数据格式:

GET方法:

1、axios.get(url,config).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

2、axios({method:'get',url:'xxxxx',config}).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

可以在config中设置基础URL,超时时间、传参方式、请求头等信息,但是传参方式一般为params,请求参数在url中。

POST方法(appcation/json或者form-data):

1、①appcation/json方式

let data={id:12}

axios.post(url,data,config).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

②appcation/json方式:

let data={id:12}

axios({method:'post',url,data:data,config}).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

2、①form-data方式

let data={id:12}

let formData = new FormData()

for(let key in data){

formData.append(key,data[key])

}

axios.post(url,formData,config).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

②form-data方式

let data={id:12}

let formData = new FormData()

for(let key in data){

formData.append(key,data[key])

}

axios({method:'post',url,formData:formData,config}).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

post请求同样可以在在config中设置基础URL,超时时间、传参方式、请求头等信息,但是传参方式一般用data,参数在请求体中

PUT和PATCH方式:

put和patch跟post一样,就方法不一样而已,参考post方法

DELETE方式:

类似get方式,就方法不一样而已,参考get方法。可以在config中设置基础URL,超时时间、传参方式、请求头等信息,注意请求参数,如果在url中则config中采用params方式传参,如果在请求体中,则config中采用data方式传参。

三、axios并发请求

并发请求:同时进行多个请求,并统一处理返回值,比如说:我们需要同时请求用户信息和商品信息,然后将获得的两种信息进行拼接等统一加工到一起。这涉及到axios的两种方法:axios.all(arr[])和axios.spread()。

axios.all()和axios.spread()方法

其中axios.all(arr[])这个方法的作用就是同时去请求,它的参数是数组,数组的内容就是请求方式和路径,比如:arr[] =[axios.get(url),axios.post(url,data,config)]

另一个axios.spread((A,B)=>{})这个方法是用来处理返回的数据的,其中{}中是具体的处理逻辑,A就是第一个请求的返回值,B就是第二个请求的返回值。

具体用法:

axios.all([axios.get(url),axios.post(url,data,config)]).then(axios.spread((A,B)=>{}))

四、axios实例

为什么要用axios实例呢,可能你的项目中涉及到多个接口地址,而且每种的接口的超时时间等还都不一样,那么这个时候,你就可以针对某个接口地址某种超时时间来创建独立的axios实例,后期你就可以直接这种特殊axios实例去进行数据请求了。

具体用法:

let instance = axios.create(config);

instance.get(url).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

五、关于请求中的config

config的格式为:

{

baseURL:'http:/xxxxxx', //基础url

timeout:6000, //超时时间

url:xxxxxx, //具体url

method:'get/post/put/patch/delete', //请求方式

headers:{token:'xxxxx'等}, //请求头设置

params:{}, //请求参数对象,它会将请求参数拼接到url上

data:{} //请求参数对象,它会将请求参数放到请求体中

}

config应用场景

1、全局配置

axios.defaults.timeout = 1000

axios.defaults.baseURL = 'http://XXXXX'

2、实例配置

在axios创建实例中配置

let instance = axios.create();

instance.defaults.timeout = 1000

3、请求配置

在请求中配置

axios.get(url,config).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

其中,配置优先级为:3>2>1

六、axios拦截器

什么是拦截器?拦截器就是在请求之前和响应之后能进行一些额外操作的功能实现。一般分为请求拦截器和响应拦截器两种。

请求拦截器

请求拦截器顾名思义就是在请求之前进行拦截并进行一些额外操作。

service.interceptors.request.use(

config => {

//在发送请求前的额外处理

return config

},

)

响应拦截器

响应拦截器顾名思义就是在响应之后进行拦截并进行一些额外操作。

service.interceptors.response.use(

res => {

//响应之后做一些额外操作

return res

},

error => {

//在发生错误后的额外处理

return Promise.reject(error)

}

)

注意:不管是请求拦截器还是响应拦截器,在发生错误后都会进入到请求的catch方法中,如:

axios.get(url,config).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

例子:发送请求前,在请求头中添加token,就可以用拦截器来实现

let instance = axios.create(config);

instance.interceptors.request.use(

confit=>{

config.headers.token="sssssss"

return config

},

error => {

//在发生错误后的额外处理

return Promise.reject(error)

}

)

取消拦截器

顾名思义就是取消掉已经配置的拦截器,实际用的不多,了解即可

例子:

let instance = axios.create(config);

instance.interceptors.request.use(

confit=>{

config.headers.token="sssssss"

return config

},

error => {

//在发生错误后的额外处理

return Promise.reject(error)

}

)

//取消拦截器操作:

axios.interceptors.request.eject(instance)

七、取消请求

取消请求实际中用的到不多,主要使用场景比如:用户正在批量查询一个比较耗时的数据,发起请求后用户不想查了,这时候就可以取消这个请求

主要用到:axios.CancelToken.source()方法

例子:

axios.CancelToken.source()

axios.get(url,{CancelToken:source,token}).then(res=>{数据处理逻辑}).catch(err=>{错误处理逻辑})

//触发取消请求:

source.cancel('错误信息')

就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404525.html

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

相关文章

k8s-kubectl常用命令

一、基础命令 1.1 get 查询集群所有资源的详细信息,resource包括集群节点、运行的Pod、Deployment、Service等。 1.1.1 查询Pod kubectl get po -o wid 1.1.2 查询所有NameSpace kubectl get namespace 1.1.3 查询NameSpace下Pod kubectl get po --all-namespaces…

Qt顶部圆角窗体

Qt:实现顶层窗体圆角_qt 圆角窗口弹窗-CSDN博客 setWindowFlags(Qt::FramelessWindowHint);QBitmap bmp(this->size());bmp.fill();QPainter p(&bmp);p.setPen(Qt::NoPen);p.setBrush(Qt::black);p.setRenderHint(QPainter::Antialiasing);p.drawRoundedRec…

HEGERLS智能物流机器人|场景为王 以存取为技术核心布局的仓储集群

随着物流需求的多样化、复杂化,四向穿梭车技术经过几年的蓬勃发展,正在各领域迎来愈加广泛的应用。河北沃克作为该领域的代表,凭借庞大的产品群、功能强大的软件系统以及资源丰富的生态合作伙伴体系实现了快速的发展。其中,海格里…

【江科大】STM32:TIM输入捕获(理论部分)

文章目录 IC(Input Capture)输入捕获PWM频率 知识点补充1. 滤波器的工作原理:2. 边沿检测器:自动化清零CNT输入捕获的基本结构PWMI基本结构滤波器和分频器的区别误差分析pwm.cmain.cIC.c PWM模式测频率和占空比 IC(Inp…

Leetcode—40.组合总和II【中等】

2023每日刷题&#xff08;七十七&#xff09; Leetcode—40.组合总和II 算法思想 实现代码 class Solution { public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int…

i18n多国语言Internationalization的动态实现

一、数据动态的更新 在上一篇i18n多国语言Internationalization的实现-CSDN博客&#xff0c;可能会遇到一个问题&#xff0c;我们在进行英文或中文切换时&#xff0c;并没有办法对当前的数据进行动态的更新。指的是什么意思呢&#xff1f;当前app.js当中一个组件内容&#xff…

shell脚本概述

将命令写到脚本里面&#xff0c;利用路径或者解释器去执行。简要来说脚本其实就是命令的集合。 例如&#xff1a;echo $&#xff1f; 自定义变量&#xff0c;查看上次命令执行是否正确 linux常用的shell 脚本的构成&#xff1a; 1.解释器 &#xff08;脚本是用什么语言写的…

Linux如何将文件或目录打成rpm包? -- fpm打包详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

C++面试宝典第23题:乌托邦树

题目 乌托邦树每年经历2个生长周期。每年春天,它的高度都会翻倍。每年夏天,他的高度都会增加1米。对于一颗在春天开始时种下的高为1米的树,问经过指定周期后,树的高度为多少? 输入描述:输入一个数字N(0 <= N <= 1000),表示指定周期。 比如:样例输入为3。 输出描…

怎么提升数据分析能力?——功法篇(下)

先来复习一下上篇提到的3个疑问&#xff1a; 为什么我做出来的分析总觉得没有别人的那么高级&#xff1f; 老板为什么总说我的分析“太浅了”&#xff1f; 数据分析师每天的工作就是取数做需求&#xff1f; 看完上篇讲的金字塔原理&#xff0c;如果你还有疑问&#xff0c;不妨再…

react 实现页面状态缓存(keep-alive)

前言&#xff1a; 因为 react、vue都是单页面应用&#xff0c;路由跳转时&#xff0c;就会销毁上一个页面的组件。但是有些项目不想被销毁&#xff0c;想保存状态。 比如&#xff1a;h5项目跳转其他页面返回时&#xff0c;页面状态不丢失。设想一个 页面我滑倒了中间&#xf…

Modbus网关BL101 既实现Modbus转MQTT,还能当串口服务器使用

随着工业4.0的迅猛发展&#xff0c;人们深刻认识到在工业生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的工业电力数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化系统、远程监控和物联网应用应用环境…

三大队在线看

三大队超清完整资源 关注公众号&#xff0c;回复关键字 “三大队” 即可获取网盘资源&#xff08;可在线看&#xff09;&#xff0c;真诚分享无套路

风二西CTF流量题大集合-刷题笔记|NSSCTF流量题(1)

2.[鹤城杯 2021]流量分析 flag{w1reshARK_ez_1sntit} 3.[CISCN 2023 初赛]被加密的生产流量 c1f_fi1g_1000 4.[GKCTF 2021]签到 flag{Welc0me_GkC4F_m1siCCCCCC!} 5.[闽盾杯 2021]Modbus的秘密 flag{HeiDun_2021_JingSai} 6.[LitCTF 2023]easy_shark 7.[CISCN 2022 初赛]ez…

13、Kafka ------ kafka 消费者API用法(消费者消费消息代码演示)

目录 kafka 消费者API用法消费者API使用消费者API消费消息消费者消费消息的代码演示1、官方API示例2、创建消费者类3、演示消费结果1、演示消费者属于同一个消费者组2、演示消费者不属于同一个消费者组3、停止线程不适用4、一些参数解释 代码生产者&#xff1a;MessageProducer…

基于SpringBoot Vue医院门诊管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Prometheus插件安装kafka_exporter

下载地址 https://github.com/danielqsj/kafka_exporter/releases 解压 tar -zxvf kafka_exporter-1.7.0.linux-amd64.tar.gzmv kafka_exporter-1.7.0.linux-amd64 kafka_exporter服务配置 cd /usr/lib/systemd/systemvi kafka_exporter.service内容如下 [Unit] Descript…

链路聚合原理与配置

链路聚合原理 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。采用…

CLIP探索笔记

CLIP探索笔记 记录CLIP的流水账&#xff0c;训练和推理是如何完成的&#xff1f; 每一次阅读都有不同的领悟和发现&#xff0c;一些简单的想法。 官方信息 CodePaperBlog只有预测代码模型&#xff0c;没有训练代码 训练阶段 Text Encoder不需要训练&#xff0c;直接拿现成…

数据结构:堆与堆排序

目录 堆的定义&#xff1a; 堆的实现&#xff1a; 堆的元素插入&#xff1a; 堆元素删除&#xff1a; 堆初始化与销毁&#xff1a; 堆排序&#xff1a; 堆的定义&#xff1a; 堆是一种完全二叉树&#xff0c;完全二叉树定义如下&#xff1a; 一棵深度为k的有n个结点的二…