axios网络请求

末蓝、 2023-01-10 14:38 273阅读 0赞

人的一生就像一篇文章,只有经过多次精心修改,才能不断完善。
你好,我是梦阳辰,期待与你相遇!

文章目录

  • 01.概述
  • 02.axios请求方式
    • 使用vue-axios(重点)
    • axios模块封装(重点)
  • 03.axios拦截器

01.概述

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

axios中文文档

Vue中发送网络请求有非常多的方式。那么,在开发中,如何选择呢?**选择一:**传统的Ajax是基于XMLHttpRequest(XHR)

为什么不用它呢?
非常好解释,配置和调用方式等非常混乱.

编码起来看起来就非常蛋疼.

所以真实开发中很少直接使用,而是使用jQuery-Ajax

选择二:
在前面的学习中,我们经常会使用jQuery-Ajax相对于传统的Ajax非常好用.

为什么不选择它呢?
首先,我们先明确一点:在Vue的整个开发中都是不需要
使用jQuery 了.

那么,就意味着为了方便我们进行一个网络请求,特意引用一个jQuery,你觉得合理吗?

jQuery的代码1w+行.

Vue的代码才1w+行.

完全没有必要为了用网络请求就引用这个重量级的框架.

选择三:官方在Vue1.x的时候,推出了Vue-resource.>Vue-resource的体积相对于jQuery小很多.>另外Vue-resource是官方推出的.

为什么不选择它呢?
在Vue2.0退出后, Vue作者就在GitHub的Issues中说明了去掉vue-resource,并且以后也不会再更新.

那么意味着以后vue-reource不再支持新的版本时,也不会再继续更新和维护.

对以后的项目开发和维护都存在很大的隐患.

选择四:在说明不再继续更新和维护vue-resource的同时,作者还推荐了一个框架: axios

为什么用它呢?

axios有非常多的优点,并且用起来也非常方便.

为什么选择axios?
功能特点:
在浏览器中发送XMLHttpRequests请求

在node.js 中发送http请求

支持Promise API

拦截请求和响应

转换请求和响应数据等等

02.axios请求方式

支持多种请求方式:

  1. axios(config)
  2. axios.request(config)
  3. axios.get(url[, config])
  4. axios.delete(url[, config])
  5. axios.head(url[, config])
  6. axios.post(url[, data[ config]l)
  7. axios.put(url[, data[, config]I)
  8. axios.patch(url[, data[, configl]l)

安装axios:

  1. npm install axios --save

使用:
默认get请求

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. import axios from "axios";
  6. createApp(App).use(store).use(router).mount('#app')
  7. axios({
  8. url:'http://123.207.32.32:8000/home/data',
  9. method:'get',
  10. params:{ //参数
  11. type:'pop',
  12. page:1
  13. }
  14. }).then(res=>{
  15. console.log(res)
  16. })

使用vue-axios(重点)

官网

vue-axios是将axios集成到Vue.js的小包装器,可以像插件一样进行安装。

安装完axios,vue-axios之后可以在Vue项目下面node_modules/_vue-axios/src/index.js中看到vue-axios的源代码。使用 Vue 的插件写法,更符合 Vue 整体生态环境。

安装:

  1. npm install --save axios vue-axios

将下面代码加入入口文件:

  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import VueAxios from 'vue-axios'
  4. Vue.use(VueAxios, axios)

Script:

  1. 按照这个顺序分别引入这三个文件: vue, axios and vue-axios

使用:

This wrapper bind axios to Vue or this if you’re using single file component.

你可以按照以下方式使用:

  1. Vue.axios.get(api).then((response) => {
  2. console.log(response.data)
  3. })
  4. this.axios.get(api).then((response) => {
  5. console.log(response.data)
  6. })
  7. this.$http.get(api).then((response) => {
  8. console.log(response.data)
  9. })

有时候,我们可能需求同时发送两个请求使用axios.all,可以放入多个请求的数组.

axios.all()返回的结果是一个数组,使用axios.spread 可将数组[res1,res2]展开为res1, res2

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. import Vue from 'vue'
  6. import axios from 'axios'
  7. import VueAxios from 'vue-axios'
  8. createApp(App).use(store).use(router).mount('#app')
  9. axios({
  10. url:'http://123.207.32.32:8000/home/data',
  11. method:'get',
  12. params:{ //参数
  13. type:'pop',
  14. page:1
  15. }
  16. }).then(res=>{
  17. console.log(res)
  18. })
  19. //2.axios发送并发请求
  20. axios.all([axios({
  21. url:'http://123.207.32.32:8000/home/multidata'
  22. }),axios({
  23. url:'http://123.207.32.32:8000/home/data',
  24. params:{ //参数
  25. type:'sell',
  26. page:2
  27. }
  28. })])./*then(results=>{ //多个请求成功后处理
  29. console.log(results)
  30. })*/
  31. then(axios.spread((res1,res2)=>{
  32. console.log(res1)
  33. console.log(res2)
  34. }))

axios全局配置:
事实上,在开发中可能很多参数都是固定的.
这个时候我们可以进行一些抽取,也可以利用axiox的全局配置
在这里插入图片描述
在这里插入图片描述
Axios实例:
当服务器有多个时,可以创建多个Axios实例,进行网络请求。
在这里插入图片描述

axios模块封装(重点)

如果不封装,你可能在每个组件中导入axios,然后使用网络请求。
这样操作的缺点在于,对第三方框架依赖太大,如果第三方框架不在维护…。并且代码冗余。

新建network文件夹
新建request.js

  1. import axios from "axios";
  2. export function request(config,success,failure) {
  3. //创建axios的实例
  4. const instance = axios.create({
  5. baseURL:'http://123.207.32.32:8000',
  6. timeout:5000
  7. })
  8. //发送真正的网络请求
  9. instance(config).then(res=>{
  10. success(res)
  11. }).catch(err=>{
  12. failure(err)
  13. })
  14. }

使用:

  1. //封装模块的使用
  2. import { request} from "./network/request";
  3. request({
  4. url:'/home/multidata'
  5. },res=>{
  6. console.log(res)
  7. },err=>{
  8. console.log(err)
  9. })

对封装进行简化:

  1. import axios from "axios";
  2. export function request(config,success,failure) {
  3. //创建axios的实例
  4. const instance = axios.create({
  5. baseURL:'http://123.207.32.32:8000',
  6. timeout:5000
  7. })
  8. //发送真正的网络请求
  9. return instance(config)//返回的是一个promise
  10. }

使用:

  1. import { request} from "./network/request";
  2. request({
  3. url:'/home/multidata'
  4. }).then(res=>{
  5. console.log(res)
  6. }).catch(err=>{
  7. console.log(err)
  8. })

03.axios拦截器

对请求进行拦截

axios提供了拦截器,用于我们在发送每次请求或者得到响应后,进行对应的处理。如何使用拦截器呢?

在请求或响应被 then 或 catch 处理前拦截它们。

  1. // 添加请求拦截器
  2. axios.interceptors.request.use(function (config) {
  3. // 在发送请求之前做些什么
  4. return config;
  5. }, function (error) {
  6. // 对请求错误做些什么
  7. return Promise.reject(error);
  8. });
  9. // 添加响应拦截器
  10. axios.interceptors.response.use(function (response) {
  11. // 对响应数据做点什么
  12. return response;
  13. }, function (error) {
  14. // 对响应错误做点什么
  15. return Promise.reject(error);
  16. });

例如:

  1. import axios from "axios";
  2. export function request(config,success,failure) {
  3. //创建axios的实例
  4. const instance = axios.create({
  5. baseURL:'http://123.207.32.32:8000',
  6. timeout:5000
  7. })
  8. //拦截器
  9. instance.interceptors.request.use(config=>{
  10. // 在发送请求之前做些什么
  11. console.log("在发送请求之前做些什么")
  12. return config;
  13. },err=>{
  14. // 对请求错误做些什么
  15. return Promise.reject(err);
  16. })
  17. instance.interceptors.response.use(response=>{
  18. // 对响应数据做点什么
  19. return response
  20. },err=>{
  21. // 对响应错误做点什么
  22. return Promise.reject(err);
  23. })
  24. //发送真正的网络请求
  25. instance(config).then(res=>{
  26. success(res)
  27. }).catch(err=>{
  28. failure(err)
  29. })
  30. }

在这里插入图片描述

Don’t let dream just be your dream.

在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读

    相关 axios网络请求

    > 人的一生就像一篇文章,只有经过多次精心修改,才能不断完善。 > 你好,我是梦阳辰,期待与你相遇! 文章目录 01.概述 02.axios请求方式