axios的封装、配置及使用

背景:一个vue项目中需要使用axios进行数据接口请求,所以,本文简单讲了一下本人在一个项目中使用axios的过程,包括安装axios、封装axios以及axios的封装后的具体使用

一、axios安装:首先安装axios

npm install axios

二、axios封装:项目中创建一个js文件如:axios.js,在axios.js文件中进行axios的封装

//1、引入axios
import axios from 'axios'
//2、创建axios的实例
let httpService = axios.create({
    baseURL: process.env.NODE_ENV === "development" ? "/devApi" : "/proApi",// TODO:具体的配置可以根据项目情况而来
    timeout:5000
})
//3、axios的拦截--request
httpService.interceptors.request.use(config => {
    // 请求成功处理
    if(localStorage.getItem('token')){//判断浏览器中的cookie中是否存在项目的token
        config.headers.token = localStorage.getItem('token')
    }
    return config;
},err => {
    Promise.reject(err);// 请求错误处理
})

//4、axios的拦截--response
httpService.interceptors.response.use(response => {
	// TODO:具体的code对应的处理可继续添加修改
    if(response.data.code === 200){
        console.log('请求成功')
    }
    if(response.data.code === 300){
        console.log(response.data.msg)
    }
    return response;
},err => {
	// TODO:具体的code对应的处理可继续添加修改
    if(err.response.code === 301){
        console.log('登录过期');
         //登录过期跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 ---主页(index) 或者 退出到登录前的浏览的页面  
        //这样登录页面登录接口成功之后可以进行跳转 主页(index) 或者 退出到登录前的页面: let path = this.$route.query.redirect || '/index.js';   this.$router.push(path);
        setTimeout(() => {
          this.$router.replace({
            path: '/login',
            query: {
              redirect: this.$router.currentRoute.fullPath
            }
          });
        }, 1000);
        localStorage.setItem('token','');//清除token
    }
    if(err.response.code === 500){
        console.log('请联系管理员');
    }
    return Promise.reject(err);
})

//5、get请求的封装
export function get(url,params={}){
    return new Promise((resolve,reject) => {
        httpService({
            url:url,
            method:'get',
            params:params
        }).then(res => {
            resolve(res);
        }).catch(err => {
            reject(err);
        })
    })
}

//6、post请求封装  默认json格式:'Content-Type':'application/json',如果是文件上传,可以修改headers为 headers: { 'Content-Type': 'multipart/form-data' }
export function post(url,params={},headers={'Content-Type':'application/json'}){
    return new Promise((resolve,reject) => {
        httpService({
            url:url,
            method:'post',
            data:params,
            headers: headers
        }).then(res => {
            resolve(res);
        }).catch(err => {
            reject(err);
        })
    })
}
//7、将模块暴露
export default{
    get,
    post
}

三、axios封装库的使用:在api的文件中引入封装好的axios,如在用户api的文件(user.js)中

import {get,post} from '../axios.js'; 
//获取用户list
export const getUserList = params => get('/userList',params);
//提交用户信息
export const updateUserInfo = params => post('/updateUserInfo',params);
//批量重置密码  参数最后转化为 userid[0]:111 userid[1]:2222 userid[2]:333  userid[3]:444 userid[4]:5555
export const resetPwd = params => axios.post('/resetSysUserPasswordByUserId',params);


注意:如果想用es的qs库或者node.js的querystring来编码传的参数数据(具体参数转换效果可查看他们的官方文档解析),只需在用户api的文件(user.js)中按下面的步骤即可,下面以qs进行示范:

1、安装qs库

npm install qs

2、在用户api的文件(user.js)中引入并使用qs库

import {get,post} from '../axios.js';
import qs from 'qs';
//获取用户list
export const getUserList = params => get('/userList',qs.stringify(params));
//提交用户信息
export const updateUserInfo = params => post('/updateUserInfo',qs.stringify(params));
//批量重置密码  参数最后转化为 userid[]:111 userid[]:2222 userid[]:333  userid[]:444 userid[]:5555
export const resetPwd = params => axios.post('/resetSysUserPasswordByUserId', qs.stringify(data,{arrayFormat:'brackets'}));

四、axios运用具体页面:比如在user.vue页面进行接口的调用

import {getUserList, updateUserInfo, resetPwd} from '../../api/user.js';//引入user的api
export default({
    name:'user',
    data(){
        return {}
    },
    methods:{
        //1、请求用户list
        async getUserList(){
            let res = await getUserList({ page:1,rows:2 });
        },
        //2、提交用户信息
        async updateUserInfo(){
            let res = await updateUserInfo({ name:'zhangsan',age:22 });
        },
        //3、批量重置密码  
         async resetPwd(){
            //项目引入qs库的情况下,那么上传的数据格式为: userid[]:111 userid[]:2222 userid[]:333  userid[]:444 userid[]:5555
            //如果没有引入qs库,那么上传的数据格式为: userid[0]:111 userid[1]:2222 userid[2]:333  userid[3]:444 userid[4]:5555
            let res = await resetPwd({ userId:[111,2222,333,444,5555] });
         },
    }
})
axios是现在前端开发中最主流的网络请求库之一,常用于请求后端API接口。虽然axios本身已提供了很好的配置封装接口,但在实际项目开发中,我们还是需要针对项目的需要进行一些额外的封装配置。 常用配置 1. baseURL:设置默认请求的url,方便统一管理。 2. timeout:设置请求超时时间。 3. withCredentials:设置是否携带cookie。 4. headers:设置请求头信息,如token等。 5. responseType:设置返回数据的类型。 常用封装 1. 请求拦截器:在请求发送之前进行一些处理,如设置请求头,loading等。 ``` axios.interceptors.request.use(config => { // do something return config; }, error => { return Promise.reject(error) }); ``` 2. 响应拦截器:在请求返回之后进行一些处理,如对返回状态码做统一处理。 ``` axios.interceptors.response.use(response => { // do something return response; }, error => { return Promise.reject(error) }); ``` 3. 错误处理:对接口请求出错进行统一处理,如弹窗提示等。 ``` function errorHandler(error) { // do something return Promise.reject(error); } axios.get(url).then(response => { // do something }).catch(error => { errorHandler(error); }); ``` 4. 封装请求方法:根据具体场景,将常用的请求方法进行封装,方便调用。 ``` function get(url, params) { return axios.get(url, { params }) } function post(url, data) { return axios.post(url, data) } ``` 5. 配置封装:根据项目需要,将axios配置封装放到一个统一的文件中,方便管理。 ``` import axios from 'axios'; import qs from 'qs'; // 设置默认请求url axios.defaults.baseURL = process.env.VUE_APP_BASE_URL; // 请求拦截器 axios.interceptors.request.use(config => { // do something return config; }, error => { return Promise.reject(error) }); // 响应拦截器 axios.interceptors.response.use(response => { // do something return response; }, error => { return Promise.reject(error) }); // 封装请求方法 function get(url, params) { return axios.get(url, { params }) } function post(url, data) { return axios.post(url, qs.stringify(data)) } export default { get, post } ``` 综上所述,axios配置封装对于提高开发效率和项目的可维护性非常重要。在实际项目开发中,我们需要根据具体需要对axios进行适当的封装配置,使其更符合项目的实际需求。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值