• axios 简介及在项目中的使用


    目录

    axios 是什么?

    axios的特点有哪些?

    axios 常用语法

    axios.create(config)

    Vue项目中 axios 的二次封装

    axios 是什么?

    是一个基于 promise 的网络请求库,可用在node.js 和 浏览器中。在服务端使用 原生node.js.http模块,在客户端 (即浏览器端) 使用 XMLHttpRequests。

    因为是基于promise的请求库,所以支持promise的API,

    1. let p = this.$axios.get('/api/just_test');
    2. console.log(p); // 1 Promise : PromiseStatus = pending
    3. p.then(res=>{
    4. console.tiemEnd('x');//5001ms
    5. console.log(p);// 3 Promise : PromiseStatus = resolved
    6. });
    7. p.catch(err=>{
    8. console.log(p); // 4 Promise : PromiseStatus = reject
    9. });
    10. console.log('AAAA'); // 2
    11. //输出顺序 1 -> 2 -> 3或4
    12. // 后台部分
    13. def just_test(request):
    14. time.sleep(5)
    15. return JsonResponse({'info': 'okok'})

    let p = this.$axios.get('/api/just_test') 相当于:

    return new Promise( (resolved,reject)=>{
            // 调用http库请求数据
    }) // 即获取了一个Promise对象,注意,这是同步调用,回调函数才是异步调用。
     
    可以看到后台中设置了时间停止5秒,即用来模拟需要5秒才能获取到数据,这时候该promise对象的状态是pending,即没有完成也没有失败;
    过了5秒后,请求数据完成, then回调加入队列中执行;

    axios请求返回一个promise对象,和promise中的 API 一致,可以链式调用,支持async 和 await 

    axios的特点有哪些?

    1. Axios是一个基于 promise 的HTTP库,支持promise所有的API
    2. 它可以拦截请求和响应,支持请求/响应拦截器
    3. 支持请求取消
    4. 它可以转换请求数据和响应数据,并对响应回来的内容自动转换成JSON类型的数据
    5. 批量发送多个请求
    6. 安全性更高,客户端支持防御XSRF

    axios 常用语法

    axios(config): 通用 / 最本质的发任意类型请求的方式
    axios(url[, config]): 可以只指定 url get 请求
    axios.request(config): 等同于 axios(config)
    axios.get(url[, config]): get 请求
    axios.delete(url[, config]): delete 请求
    axios.post(url[, data, config]): post 请求
    axios.put(url[, data, config]): put 请求
    axios.defaults.xxx: 请求的默认全局配置
    axios.interceptors.request.use(): 添加请求拦截器
    axios.interceptors.response.use(): 添加响应拦截器
    axios.create([config]): 创建一个新的 axios( 它没有下面的功能 )
    axios.Cancel(): 用于创建取消请求的错误对象
    axios.CancelToken(): 用于创建取消请求的 token 对象
    axios.isCancel(): 是否是一个取消请求的错误
    axios.all(promises): 用于批量执行多个异步请求
    axios.spread(): 用来指定接收所有成功数据的回调函数的方法

    axios.create(config)

    1. 根据指定配置创建一个新的 axios, 也就就每个新 axios 都有自己的配置
    2. axios 只是没有取消请求和批量发请求的方法 , 其它所有语法都是一致的
    3. 为什么要设计这个语法 ?
    (1) 需求 : 项目中有部分接口需要的配置与另一部分接口需要的配置不太一
    , 如何处理
    (2) 解决 : 创建 2 个新 axios, 每个都有自己特有的配置 , 分别应用到不同要
    求的接口请求中

    Vue项目中 axios 的二次封装

    1. // 对于axios进行二次封装,加上了请求和响应拦截器
    2. import axios from 'axios'
    3. // 引入进度条
    4. import nprogress from 'nprogress'
    5. // start进度条开始,done进度条结束
    6. //引入进度条的样式
    7. import 'nprogress/nprogress.css'
    8. // 在当前模块中引入 store
    9. import store from '@/store'
    10. // 1.利用axios对象的方法create,去创建一个axios实例
    11. // 2. requests就是axios
    12. const requests = axios.create({
    13. // 配置对象
    14. // 基础路径,发送请求的时候,所有路径中都加上/api
    15. baseURL:'/api',
    16. //代表请求超时的时间
    17. timeout:5000,
    18. })
    19. // 请求拦截器,在发送请求之前做一些事情
    20. requests.interceptors.request.use((config)=>{
    21. // config: 配置对象,对象里面有一个属性很重要,即 header请求头
    22. if(store.state.detail.uuid_token){
    23. // 给请求头添加一个字段(userTempId):和后端协商一致 表明用户临时身份
    24. config.headers.userTempId = store.state.detail.uuid_token;
    25. }
    26. // 需要携带token给服务器 验证用户身份 在使用游客身份加入购物车的时候使用
    27. if(store.state.user.token){
    28. config.headers.token = store.state.user.token;
    29. }
    30. // 发请求之前 进度条开始动
    31. nprogress.start();
    32. return config
    33. })
    34. // 响应拦截器
    35. requests.interceptors.response.use((response)=>{
    36. // 成功的回调函数: 服务器相应数据回来以后,响应拦截器可以检测到,可以做一些事情
    37. // 请求成功以后能够拿到相应的数据以后,使进度条结束
    38. nprogress.done()
    39. return response.data;
    40. },(error)=>{
    41. // 响应失败的回调函数
    42. return Promise.reject(new Error('failed'))
    43. })
    44. // 对外暴露
    45. export default requests


     

  • 相关阅读:
    [R] Underline your idea with ggplot2
    Redis缓存详解(一):缓存数据一致性,缓存穿透、击穿、雪崩问题
    unity3d-Animation&&Animator接口(基本使用)
    mysql内连接与外连接详解
    小程序学习笔记
    #21天学习挑战赛—深度学习实战100例#——动物识别
    让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%
    Linux内存管理(二十七):shrink_list 详解(2)
    郑州大学编译原理实验四LR(0)分析算法JAVA
    求logx(c++基础)
  • 原文地址:https://blog.csdn.net/csdssdn/article/details/126159492