Vue3 axios请求


前言

这篇文章里的所有操作都是在Vue3 + Cli4.5.x的环境下进行的.


一、安装

安装步骤和在vue2里的安装没有区别,使用npm安装即可.

npm i axios --save

二、请求数据

该尽量避免在每个组件中单独请求数据, 不然接口一旦改动, 前端所有使用这个接口的地方都要改, 不仅如此分开进行的多次请求还会增大对服务器的压力;
下面例子在 src/api/request.js 里完成整个项目的数据请求.

请求方法
axios.get(url , {config})
axios.delete(url , {config})
axios.head(url , {config})
axios.post(url , {data}, {config})
axios.put(url , {data}, {config})
axios.patch(url , {data}, {config})

抽离式

先在request.js里create几个axios实例, 比如要用到三个baseURL完全不同的接口, 那就写三个实例:

//这是在reqest.js里
const instance1 = axios.create({
    baseURL: 'http://xxxxx.com:3000',
    timeout: 5000,
});

const instance2 = axios.create({
    baseURL: 'http://xxxx.com:3000',
    timeout: 5000,
});

const instance3 = axios.create({
    baseURL: 'http://xxxx.com:3000',
    timeout: 5000,
});

//export default instance1;
export default { instance1, instance2, instance3 };
//这里是把所有方法一起暴露, 引入是整体, 用的时候记得拆开;

组件:

//<script setup>

import allInstance from "../api/request";  
import { onMounted } from "vue";

onMounted(() => {
  get();
});

const get = () => {
  allInstance.instance1.get("/getHottest").then((res) => {
    console.log(res);
  });
};
//allInstance包含了三个方法, 这里只用instance1;
//</script>

在组件里发请求的时候, 用于请求的代码要尽可能的少, 因为这跟组件本身内容几乎毫无关系, 所以能写到request.js里的就不要写到组件里.


简式

做请求少的时候可以用这种.
写的时候比较爽, 改的时候比较酸爽.
要是跨域或者接口改动, 真的是要回来一个文件一个文件的改…

axios.defaults.baseURL = 'http://xxx.xxx.xx.xxx:3000';
axios.post("/login", {
            username:"baiX"
          })
     .then((res) => {
       console.log(res);
     });

并发请求

axios.all(): 用于同时发送多个请求, 这个一般在onMounted或者create这种时候, 页面第一次加载. 需要发送多个请求.

//request.js
import axios from "axios";

const instance1 = axios.create({
    baseURL: 'http://x.xxx.xx.xxx:3000',
    timeout: 5000,
});

export default instance1;
//<script setup>

import axios from "axios";
import instance1 from "../../api/request";
import { onMounted } from "vue";
//导出方用export default导出, 引入不用加括号, export导出要加不然会警告

onMounted(() => {
  getall();
});

function get1() {
  return instance1.get("/getHottestArticle");
}

function get2() {
  return instance1.get("/getLatestArticle");
}

function getall() {
  axios.all([get1(), get2()]).then((res) => {
    console.log(res);
  });
}

//</script>

当然, 直接在axios.all()里写好几个请求也是可以的, 就是不好看啊…


三、保存数据

上表的语句书写正确仅能完成数据的请求,JS是有内存回收机制的,即便成功请求到, 数据还是会在方法执行完后被连同方法一起销毁,我们得先把数据及时的保存下来.

选择保存在setup()里或者setup的reactive里:

//<script setup>
import { onMounted, reactive } from 'vue';
import allInstance from '@/api/request';

let something = '';

const qingqiu = () => {
  allInstance.instance1.post('/toGetSomething', {
    username: "unknown"
  })
    .then((res) => {
      something = res;
    })
}

//<script>

如果是放到了setup()的data里:

//<script setup>
import { onMounted, reactive } from 'vue';
import allInstance from '@/api/request';

let data = reactive({
  something: '',
})

const qingqiu = () => {
  allInstance.instance1.post('/toGetSomething', {
    username: "unknown"
  })
    .then((res) => {
      data.something = res;
    })
}

当然, push()之类的这种处理方法也可以用, 在then()里处理好res, 再赋值到setup里保存.
还有localStorage 和 sessionStorage 也很好用;


四、config配置项

配置项作用
url字符串,指明请求的目标,向何处发送请求
method字符串,设置请求的方法,默认get
baseurl字符串,设置url的基础结构,该项设置后,baseurl会自动与url进行拼接,形成完整的url,这个baseurl最好是设置为多个请求url相同的前段部分,如此可以共用baseurl
transformRequest数组型值,只能用在put, post,patch方法中,在向服务器发送数据前在此处进行再处理,你可以在这个数组里写处理数据的函数,但别忘了return.
transformResponse数组型值,可以对服务器返回的东西先做一些处理,这个操作允许在响应之前完成,你同样可以在这个数组里写函数,同样别忘记return.
headers对象型值,有验证作用, 在某些项目中需要进行身份校验,要求在请求头信息中加入特殊的标识,以此检验是否满足请求条件
params简化传递url参数的流程,添加到url的请求字符串中无法传递json格式的数据,主要用于get中
data对象型(会被转换为字符串) / 字符串型, 添加到请求体(body)中,支持json格式的数据,主要用于post中
paramsSerializer函数型值,对请求的参数序列化, 它可以处理用于传递的数据, 比如您可以用这个属性来把params里的数组转化为字符串,因为函数中需要使用qs.stringify(), 使用前需要引入序列化库qs(即import qs from ‘qs’)
timeout设置等待时长,请求超时会取消请求
withCredentials布尔值, 设置跨域请求时coockie的携带,默认false
adapter设置对请求的识别,是发送ajax请求还是在js里发送http请求
auth对象, 设置对请求的基础信息验证
responseType对响应器结果的格式做设置,默认json
responseEncoding响应结果编码格式,默认utf8
xsrfCookieName跨域请求标识,对coockie名字做设置
xsrfHeaderName对头信息做安全设置,保证请求来自正确的客户端
onUploadProgress上传回调,值可以为自定义函数
onDownloadProgress下载回调,值可以为自定义函数
maxContentLength设置http响应体的最大尺寸,单位bit
maxBodyLength请求体的最大尺寸,单位bit
validateStatus对响应结果的成功码做相关设置
maxRedirects最大跳转次数
socketPath设定socketPath位置,作用:数据转发
proxy设置代理
cancelToken对ajax的请求做取消设置
decompress解压响应结果

总结

2022-5-2, 修缮了亿下, 改了一堆过时的语法和用法…

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值