axios二次封装

简介: axios二次封装

在工作中,我们所使用的框架都会搭配axios请求库,我们一般基于项目的请求操作和返回结果进行二次封装axios以此去适应不同的项目请求场景,接下来我们来实现一下

二次封装axios


首先我们要引入axios,引入之后我们设置好请求返回结果的提示语

const MESSAGE = Object.freeze({
            token: '凭证已过期,请重新登录',
            login: '账号已在其他地方登录,请重新登录',
            registerSuccess: '您已注册成功,请前往登录',
            registerReject: '账号已注册,请前往登录'
        })

在设置一下axios的基本配置,baseURL一般都是配合webpack的环境变量实现的,我们这里就直接写上,在写一个请求超时取消时间,需要注意后面配置会覆盖前面的相同配置

const AXIOSOPTION = {
            // 用于发送请求时添加请求前缀
            baseURL: 'http://xxxx.com/api',
            // 请求超时时间
            timeout: 5000
        }
        //还可以设置默认配置
        axios.defaults.headers.TOKEN = AUTH_TOKEN;

声明获取token方法

// 获取token
        function getToken() {
            return localStorage.getItem('token');
        }

创建一个axios实例,把我们刚自定义配置传递进去

const serve = axios.create(AXIOSOPTION);

声明一个请求拦截器,请求拦截器中可以做一些我们现在请求发送之前做的一些事情,这里我就通过获取token方法判断token是否存在,存在则携带在请求头中,在进行继续发送请求,如果在请求前发生错误则进行抛出错误阻止往下进行

// 请求拦截器
        serve.interceptors.request.use((config) => {
            const TOKEN = getToken();
            if (TOKEN) {
                config.headers['Token'] = TOKEN;
            }
            return config;
        }, (error) => {
            return Promise.reject(error);
        });

声明一个响应拦截器,对于请求返回的数据需要进行判断状态码,根据对应的状态码进行不同的操作,状态为0则正常返回数据,不是则根据状态码的不同给出相应的提示和操作,如果请求出错,则进行抛出错误

// 响应拦截器
        serve.interceptors.response.use((response) => {
            const { code, data } = response;
            switch (code) {
                case '0':
                    return data;
                    break;
                case '1':
                    console.log('数据获取失败');
                    return data;
                    break;
                case '1100':
                    // 重新登录操作
                    alert(MESSAGE.login)
                    break;
                case '1200':
                    //用户凭证失效
                    alert(MESSAGE.token)
                    break;
                case '1300':
                    //用户注册成功
                    alert(MESSAGE.registerSuccess)
                    break;
                case '1300':
                    //用户登录提示
                    alert(MESSAGE.registerReject)
                    break;
            }
            // 对响应数据做点什么
            return response;
        }, (error) => {
            // 对响应错误做点什么
            return Promise.reject(error);
        });

封装请求方法


axios库经过二次封装后,在进行封装请求并导出,便于使用,这里只封装get和post请求,其他请求操作也可以照此封装和导出

export function GET(url, data) {
            return serve({
                url,
                method: 'get',
                data
            })
        }
        export function POST(url, data) {
            return serve({
                url,
                method: 'post',
                data
            })
        }

使用


将封装后的get和post请求方法导入并声明一个API常量,通过原生的Object.freeze方法进行冻结API常量的指向对象,以此防止后面操作去修改对象里面的值,API常量对象中存放的是接口地址, 如果使用该接口则使用API.的语法进行获取到对应的接口地址并封装在函数中且导出,这样便于后期管理接口

import { GET, POST } from './axios'
        const API = Object.freeze({
            login: '/login', //登录
            home: '/home',//获取首页数据
        })
        export function Login(data = {}) {
            return POST(API.login, data)
        }
        export function getHome(data = {}) {
            return GET(API.home, data)
        }

在将封装后的接口请求导入进入到使用的页面中,进行使用并传递参数,由于接口请求后会返回一个promise对象,所以我们这里用promise的then方法捕获接口请求成功且进行处理,使用catch方法捕获接口请求报错或失败且进行处理

import { Login, getHome } from './api'
        //    登录操作
        function userLogin(query) {
            const { userName, passWord } = query;
            Login({ userName, passWord }).then(R => {
                const { code, data } = R;
                if (!data.length || code != 0) return;
                // 对数据的进行操作
            }).catch(error => {
                throw new Error(error);
            })
        }
        // 获取首页数据
        function getHome(){
            getHome().then(R => {
                const { code, data } = R;
                if (!data.length || code != 0) return;
                // 对数据的进行操作
            }).catch(error => {
                throw new Error(error);
            })
        }

坚持努力,无惧未来!

相关文章
|
2月前
|
资源调度 JavaScript 前端开发
vue-element-admin 综合开发四:axios安装和封装、mock安装/学习/使用
这篇文章是关于如何在Vue项目中使用axios进行网络请求、二次封装axios以及使用mockjs模拟响应数据的教程。
93 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天】
139 1
|
2月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第5天】
162 1
|
2月前
|
前端开发 JavaScript API
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
89 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请求的位置在呢?