• axios介绍以及对axios进行二次封装


    目录

    一、axios基础

    1、什么是axios?

    2、axios的安装

    3、axios常用配置项

    4、axios和ajax的区别 

    二、使用axios发送请求

    1、 发送get无参请求

    2、 发送get有参请求

    3、 发送post无参请求

    4、 发送post有参请求

    4.1 发送json格式的数据:

    4.2 发送表单格式的数据:

    三、 then、catch、finally

    四、axios快捷方法

    五、axios实例

    六、axios的全局配置

    七、axios拦截器

    八、 axios并发请求

    九、axios二次封装


    一、axios基础

    1、什么是axios?

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。jQuery中也封装了axios机制,但是仅适用于浏览器。

    axios功能特点:

    • 在浏览器中发送 XMLHttpRequests 请求

    • 在 node.js 中发送 http请求

    • 支持 Promise API

    • 拦截请求和响应

    • 转换请求和响应数据

    • 自动转换 JSON 数据

    2、axios的安装

    使用npm

    npm install axios

    使用cdn

    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js">script>

    3、axios常用配置项

    只有url选项式必须的,其他的都是可选,这里只列出一些常用配置项,axios还有很多其他的配置项,可以去axios官网查看。

    1. axios({
    2. // 请求路径
    3. url:"",
    4. // 请求方式,默认发送get请求
    5. method:"",
    6. // get请求携带的参数写在params中
    7. params:{},
    8. // post请求携带的参数写在data中
    9. data:{},
    10. // 请求头
    11. headers:{},
    12. // 表示请求超过timeout时间没有响应就中断 (单位为毫秒)
    13. timeout:1000,
    14. // 规定后端返回的数据格式,默认值是json
    15. responseType: 'json'
    16. })

    注意:method默认值为get,因此发送get请求时可以不写methods,responseType默认值为json 

    4、axios和ajax的区别 

    ajax特点:
        1、ajax是异步的XML和JavaScript 
        2、可以运行浏览器 不可以运行在node
        3、发送给后台数据需要手动转换,请求头需要手动设置
        4、后端响应的数据需要自己转换成js对象格式(后台相应数据为json格式)
    axios特点:
        1、axios是基于promise的http库
        2、可以调用promise的api
        3、axios默认发送就是get请求,发送数据默认格式为json
        4、axios请求头的数据格式会自动转换 

    二、使用axios发送请求

    1、 发送get无参请求

    1. axios({
    2. url:'请求地址'
    3. })

    2、 发送get有参请求

    发送get有参请求时,参数是以查询字符串的格式拼接到url地址中的。

    我们把get请求需要携带的参数放到params中,axios会自动将它们转成查询字符串。

    1. axios({
    2. url:'请求地址',
    3. // 将要传给后端的数据放到params中,axios会自动将它们转成查询字符串 (即 ?a=1&b=2)
    4. params:{
    5. a:1,
    6. b:2
    7. }
    8. })

    3、 发送post无参请求

    1. axios({
    2. url:'请求地址',
    3. method:'post'
    4. })

    4、 发送post有参请求

    4.1 发送json格式的数据:

    使用post请求默认发送的数据格式是json格式

    1. axios({
    2. url:"请求地址",
    3. method:"post",
    4. // 在请求头中指明发送的数据是json格式的数据,但是这里不写也可以,因为post请求默认发送的数据格式就是json
    5. // headers:{
    6. // "Content-Type":"application/json"
    7. // },
    8. data:{
    9. a:1,
    10. b:2
    11. }
    12. })

    4.2 发送表单格式的数据:

    使用Qs工具将表单格式数据转成json格式的数据,需要先引入Qs:

    <script src="https://cdn.bootcdn.net/ajax/libs/qs/6.11.0/qs.js">script>
    1. axios({
    2. url:"请求地址",
    3. method:"post",
    4. // 在请求头中指明发送的数据是表单格式的数据,但是这里不写也可以,因为axios请求头的数据格式会自动转换
    5. headers:{
    6. // "Content-Type":"application/x-www-form-urlencoded",
    7. // 如果需要token认证,可以在请求头中携带
    8. "Authorization":token
    9. },
    10. // 这里使用Qs将表单格式的数据转成json格式数据传给后台,因为后台需要接收json格式的数据
    11. data:Qs.stringify({
    12. a:1,
    13. b:2
    14. })
    15. })

    三、 then、catch、finally

    因为axios 是一个基于 promise 的 HTTP 库,因此它支持promise的api,我们可以在axios中使用then、catch、finally方法。

    1. axios({
    2. url:"请求地址",
    3. method:"post",
    4. headers:{
    5. "Authorization":token
    6. },
    7. data:Qs.stringify({
    8. a:1,
    9. b:2
    10. })
    11. }).then(res=>{
    12. console.log(res,'获取响应');
    13. }).catch(err=>{
    14. console.log(err,'打印错误信息');
    15. }).finally(()=>{
    16. console.log('最终执行');
    17. })

    四、axios快捷方法

    axios提供了以下一些快捷方法:(中括号里面的表示可选参数,config配置对象和axios是一样的)

    axios.request(config)   -->等同于 axios(config)

    axios.get(url[, config])

    axios.delete(url[, config])

    axios.head(url[, config])

    axios.options(url[, config])

    axios.post(url[, data[, config]])  -->data表示要传递的参数

    axios.put(url[, data[, config]])

    axios.patch(url[, data[, config]])

    get、delete、head、options使用方法一致,post、put、patch使用方法一致。

    (post 和 put:用来保存多条表单数据;patch:用来保存一条表单数据)

    1. // 1、get无参请求
    2. axios.get('请求地址').then(res=>{
    3. console.log(res);
    4. })
    5. //----------------------------------------
    6. // 2、get有参请求
    7. let url = '请求地址'
    8. axios.get(url,{
    9. params:{
    10. a:1,
    11. b:2
    12. },
    13. timeout:2000
    14. }).then(res=>{
    15. console.log(res);
    16. })
    17. //----------------------------------------
    18. // 3、post有参请求
    19. // 3.1 json格式数据
    20. let url = '请求地址'
    21. let data = {
    22. a:1,
    23. b:2
    24. }
    25. axios.post(url,data).then(res=>{
    26. console.log(res);
    27. })
    28. //----------------------------------------
    29. // 3.2 表单格式的数据
    30. let url = '请求地址'
    31. let data = {
    32. a:1,
    33. b:2
    34. }
    35. axios.post(url,Qs.stringify(data),{
    36. headers:{
    37. "Authorization":token
    38. }
    39. }).then(res=>{
    40. console.log(res);
    41. })

    五、axios实例

    创建axios实例:
    axios.create([config])

    1. // 创建实例
    2. let instance = axios.create({
    3. baseURL: '基础路径',
    4. timeout: 2000,
    5. headers:{
    6. "Authorization": token
    7. }
    8. })
    9. // 使用实例
    10. instance.post('除去基础路径后剩下的路径',{
    11. a:1,
    12. b:2
    13. }).then(res=>{
    14. console.log(res);
    15. })

    六、axios的全局配置

    全局配置axios默认配置项:给所有axios请求都添加一些默认配置项

    1. axios.defaults.baseURL = '基础路径';
    2. axios.defaults.headers.common['Authorization'] = token;
    3. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

    七、axios拦截器

    axios给我们提供了两大类拦截器:

    一种是请求拦截器,请求方向的拦截(成功请求,失败请求);

    另一种是响应拦截器,响应方向的(成功响应,失败响应)

    拦截器的作用:用于我们在网络请求的时候在发起请求或者响应时对操作进行相应的处理。

    1. //请求拦截器 对所有的axios请求做一个拦截
    2. axios.interceptors.request.use(
    3. config=>{
    4. // 在发送请求之前做些什么
    5. return config
    6. },
    7. error=>{
    8. // 对请求错误做些什么
    9. return Promise.reject(error)
    10. }
    11. );
    12. // 响应拦截器 对响应数据处理
    13. axios.interceptor.response.use(
    14. response=>{
    15. // 对响应数据做点什么
    16. return response
    17. },
    18. error=>{
    19. // 对响应错误做点什么
    20. return Promise.reject(error)
    21. }
    22. )

    使用:

    发送请求时,如果不是登录接口,需要携带token,那么我们可以在请求拦截器中做相应操作,响应拦截器主要用来对响应数据进行提取,因为响应拦截器返回的response是axios封装后的数据,而response.data才是后端返回的响应数据。

    1. //请求拦截器
    2. axios.interceptors.request.use(
    3. config=>{
    4. // 在发送请求之前做些什么
    5. if(config.url!=='登录接口'){
    6. // 需要携带token 每一个请求请求头需要携带token
    7. config.headers.Authorization='token值';
    8. }
    9. return config
    10. },
    11. error=>{
    12. // 对请求错误做些什么
    13. return Promise.reject(error)
    14. }
    15. );
    16. // 响应拦截器
    17. axios.interceptor.response.use(
    18. response=>{
    19. // 对响应数据做点什么
    20. // response.data才是后端返回的响应数据,response是axios封装后返回的数据
    21. let res = response.data;
    22. return res
    23. },
    24. error=>{
    25. // 对响应错误做点什么
    26. return Promise.reject(error)
    27. }
    28. )
    29. axios.post('请求地址',{
    30. a:1,
    31. b:2
    32. }).then(res=>{
    33. console.log(res);
    34. });

    八、 axios并发请求

    使用axios并发请求可以一次性发送多个异步请求。

    处理并发请求的助手函数:

    axios.all(iterable)

    axios.spread(callback)

    1. axios.all([
    2. axios.get(),
    3. axios.get(),
    4. axios.post()
    5. ]).then(
    6. axios.spread((res1,res2,res3)=>{
    7. console.log(res1,res2,res3); //依次打印每一个响应
    8. })
    9. )
    1. axios.all([
    2. axios.get(),
    3. axios.get(),
    4. axios.post()
    5. ]).then(res=>{
    6. console.log(res) //打印一个数组,包含上述三个请求的响应结果
    7. })

    九、axios二次封装

    我们在vue-cli脚手架中实现对axios的二次封装。

    下载axios

    -S 表示在生产环境下安装

    cnpm i -S axios

    下载Qs

    cnpm i -S qs

    在src下新建文件夹utils,utils文件夹下新建文件request.js 

     src/utils/request.js

    1. import axios from 'axios'
    2. import Qs from 'qs'
    3. let qs = Qs
    4. // 创建axios实例对象
    5. let instance = axios.create({
    6. baseURL:"基础路径",
    7. timeout:5000
    8. })
    9. // 请求拦截器
    10. instance.interceptors.request.use(config=>{
    11. // console.log(config,'请求配置项');
    12. if(config.url !== '登录接口'){
    13. config.headers.Authorization = 'token值'
    14. }
    15. return config
    16. },error=>{
    17. alert('请求失败')
    18. return Promise.reject(error)
    19. })
    20. // 响应拦截器
    21. instance.interceptors.response.use(response=>{
    22. let res = response.data
    23. return res
    24. },error=>{
    25. return Promise.reject(error)
    26. })
    27. // 封装get方法并导出
    28. export function get(url,params){
    29. return instance.get(url,{
    30. params,
    31. })
    32. }
    33. // 封装postJSON方法 (发送json格式数据)
    34. export function postJSON(url,data){
    35. return instance.post(url,data)
    36. }
    37. // 封装post方法 (发送表单格式数据)
    38. export function post(url,data){
    39. return instance.post(url,qs.stringify(data))
    40. }
    41. // 导出axios实例
    42. export default instance

    使用:

    src/views/AboutView.vue

     src/views/HomeView.vue 

  • 相关阅读:
    14.梯度检测、随机初始化、神经网络总结
    day02小程序快速入门
    rhel8 nmcli学习
    idea同一窗口启动多服务管理窗口(开启RunDashboard管理)
    SpringMVC:处理器方法的返回值(动力)
    windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
    Comparable和Comparator的区别
    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第八章 Windows常见特洛伊木马任务(4)沙箱检测
    python 注解, 装饰器@ 详解
    玩一玩MySQL8.0.35
  • 原文地址:https://blog.csdn.net/lq313131/article/details/127173938