axios的二次封装

简介: axios的二次封装

一、axios是什么?

axios 是一个轻量的 HTTP客户端


    基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。自Vue2.0起,尤大宣布取消对 vue-resource 的官方推荐,转而推荐 axios。现在 axios 已经成为大部分 Vue 开发者的首选


二、axios有哪些特性

(1).从浏览器中创建 XMLHttpRequests

(2).从 node.js 创建 http请求

(3).支持 Promise API

(4).拦截请求和响应

(5).转换请求数据和响应数据

(6).取消请求

(7).自动转换JSON 数据

(8).客户端支持防御XSRF


三、在Vue中如何封装axios

1.在vue项目中安装axios

npm i axios

3b9185295f624c98882ac9b78a6f9019.png


2.新建axios.js文件,导入axios,对axios进行二次封装,分别对请求拦截器和响应拦截器进行二次封装,封装后每次都会监测当前localStorage是否有token,如果有token,则在请求头中携带token发送请求。

import axios from 'axios'
import { toast } from '~/composables/util'
import { getToken } from '~/composables/auth'
import store from '~/store'
const service = axios.create({
    // 设置的基础路径(根路径),每次发送请求只需要写根路径后面的路径即可,会自动添加根路径
    baseURL: '/api'
})
// 添加请求拦截器
service.interceptors.request.use(
    function (config) {
        // 往header头自动添加token
        const token = getToken()
        if (token) {
            config.headers['token'] = token
        }
        return config
    },
    function (error) {
        // 对请求错误做些什么
        return Promise.reject(error)
    }
)
// 添加响应拦截器
service.interceptors.response.use(
    function (response) {
        // 对响应数据做点什么
        return response.data.data
    },
    function (error) {
        // 对响应错误做点什么
        const msg = error.response.data.msg || '请求失败'
        // token已经失效,依然进行操作,
        if (msg == '非法token,请先登录!') {
            store.dispatch('logout').then((res) => {
                location.reload()
            })
        }
        toast(error.response.data.msg || '请求失败', 'error')
        return Promise.reject(error)
    }
)
export default service

ca1c822cd6094d72b38d1b0b470641c8.png



3.在vite.config.js文件中配置代理,解决跨域问题


相当于配置 /api 就是 下面接口的访问路径 http://ceshi13.dishait.cn

    server: {
        proxy: {
            '/api': {
                target: 'http://ceshi13.dishait.cn',
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/api/, '')
            }
        }
    },

4.在vue文件中直接导入创建的axios文件,发送数据请求

<script setup>
import axios from '~/axios.js'
axios.get('/admin/statistics1').then(res => {
    console.log(res);
})
</script>

最终请求到的数据如下


9f4ac12ca2d14e74b182b242a9eb92a3.png


四、为什么要进行封装

axios 的 API 很友好,你完全可以很轻松地在项目中直接使用。


    不过随着项目规模增大,如果每发起一次HTTP请求,就要把这些比如设置超时时间、设置请求头、根据项目环境判断使用哪个请求地址、错误处理等等操作,都需要写一遍


     这种重复劳动不仅浪费时间,而且让代码变得冗余不堪,难以维护。为了提高我们的代码质量,我们应该在项目中二次封装一下 axios 再使用


目录
相关文章
|
2月前
|
资源调度 JavaScript 前端开发
vue-element-admin 综合开发四:axios安装和封装、mock安装/学习/使用
这篇文章是关于如何在Vue项目中使用axios进行网络请求、二次封装axios以及使用mockjs模拟响应数据的教程。
92 1
vue-element-admin 综合开发四:axios安装和封装、mock安装/学习/使用
|
3月前
封装axios的get、post方法
本文介绍了如何封装axios的get和post方法,并展示了具体的代码实现,包括使用axios创建实例、设置请求拦截器以及定义get和post函数。
118 2
|
2月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第8天】
138 1
|
2月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第5天】
162 1
|
2月前
|
前端开发 JavaScript API
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
87 0
|
2月前
|
JavaScript API 开发工具
vue尚品汇商城项目-day02【11.对axios二次封装+12.接口统一管理】
vue尚品汇商城项目-day02【11.对axios二次封装+12.接口统一管理】
35 0
|
4月前
|
JSON JavaScript 前端开发
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
这篇文章讨论了在Vue项目中封装axios的最佳实践,包括设置接口请求前缀、请求头、状态码、请求方法的封装,以及如何使用请求和响应拦截器来处理token和响应状态,从而简化HTTP请求的配置和错误处理,提高代码的可维护性。
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
|
5月前
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
|
6月前
|
JavaScript
vue对axios封装
vue对axios封装
|
5月前
|
前端开发
网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?
网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?