axios封装和使用

20 篇文章 0 订阅

首先安装axios

cnpm install axios --save

安装成功后新建文件

引入axios并且配置请求头、超时时间和默认路径

import axios from 'axios';
const ConfigBaseURL = 'http://localhost:3300/' //默认路径,这里也可以使用env来判断环境

// axios 配置
var instance = axios.create({
    headers: {
        'Content-Type': 'application/json;charset=UTF-8',
    },
    timeout: 30000,
    baseURL: ConfigBaseURL, //接口请求地址
})

然后添加请求拦截器和相应拦截器,请求前的操作和接收到响应的操作都可以写在这里


// 添加请求拦截器
instance.interceptors.request.use(config => {
    // 在发送请求之前做些什么,比如传token
    return config
}, error => {
    // 对请求错误做些什么
    console.log(error) // for debug
    return Promise.reject(error);
})

// 添加响应拦截器
instance.interceptors.response.use(response => {
    if (response.status === 200) {
        return Promise.resolve(response);
    } else {
        return Promise.reject(response);
    }
    //对错误代码做处理

}, error => {
    // 对响应错误做点什么
    if (error.response.status) {
        switch (error.response.status) {
            // 401: 未登录                
            // 未登录则跳转登录页面,并携带当前页面的路径                
            // 在登录成功后返回当前页面,这一步需要在登录页操作。                
            case 401:
                console.log("授权失败,请重新登录")
                break;
                // 403 token过期                
                // 登录过期对用户进行提示                
                // 清除本地token和清空vuex中token对象                
                // 跳转登录页面                
            case 403:
                console.log("拒绝访问")
                break;
                // 404请求不存在                
            case 404:
                console.log("请求错误,未找到该资源")
                break;
            case 500:
                console.log("服务器端出错")
                break;
        }

    } else {
        console.log("连接服务器失败")
    }
    return Promise.reject(error);
});

封装post和get的请求方法处理

// post 请求方法
export function post(url, data = {}) {
    return new Promise((resolve, reject) => {
        instance.post(url, data).then(response => {
            //对接口错误码做处理
            resolve(response.data);
        }, err => {
            reject(err);
        })
    })
}

// get 请求方法
export function get(url, data = {}) {
    return new Promise((resolve, reject) => {
        instance.get(url, {
                params: data
            })
            .then(response => {
                resolve(response);
            })
            .catch(err => {
                reject(err)
            })
    })
}

封装所有请求

export function request(methed, url, data = {}, headers) {
    return new Promise((resolve, reject) => {
        instance({
                method: methed || 'post',
                url: url,
                params: methed === 'get' ? data : '',
                data: methed !== 'get' ? data : '',
                headers: headers || { 'Content-Type': 'application/json;charset=UTF-8' },
            })
            .then(response => {
                //对接口错误码做处理
                resolve(response.data);
            })
            .catch(err => {
                reject(err)
            })
    })
}

完整文件

import axios from 'axios';
const ConfigBaseURL = 'http://localhost:3300/' //默认路径,这里也可以使用env来判断环境

// axios 配置
var instance = axios.create({
    headers: {
        'Content-Type': 'application/json;charset=UTF-8',
    },
    timeout: 30000,
    baseURL: ConfigBaseURL, //接口请求地址
})


// 添加请求拦截器
instance.interceptors.request.use(config => {
    // 在发送请求之前做些什么,比如传token
    return config
}, error => {
    // 对请求错误做些什么
    console.log(error) // for debug
    return Promise.reject(error);
})

// 添加响应拦截器
instance.interceptors.response.use(response => {
    if (response.status === 200) {
        return Promise.resolve(response);
    } else {
        return Promise.reject(response);
    }
    //对错误代码做处理

}, error => {
    // 对响应错误做点什么
    if (error.response.status) {
        switch (error.response.status) {
            // 401: 未登录                
            // 未登录则跳转登录页面,并携带当前页面的路径                
            // 在登录成功后返回当前页面,这一步需要在登录页操作。                
            case 401:
                console.log("授权失败,请重新登录")
                break;
                // 403 token过期                
                // 登录过期对用户进行提示                
                // 清除本地token和清空vuex中token对象                
                // 跳转登录页面                
            case 403:
                console.log("拒绝访问")
                break;
                // 404请求不存在                
            case 404:
                console.log("请求错误,未找到该资源")
                break;
            case 500:
                console.log("服务器端出错")
                break;
        }

    } else {
        console.log("连接服务器失败")
    }
    return Promise.reject(error);
});

export default instance;

/**
 * post 请求方法
 */
export function post(url, data = {}) {
    return new Promise((resolve, reject) => {
        instance.post(url, data).then(response => {
            //对接口错误码做处理
            resolve(response.data);
        }, err => {
            reject(err);
        })
    })
}

/**
 * get 请求方法
 */
export function get(url, data = {}) {
    return new Promise((resolve, reject) => {
        instance.get(url, {
                params: data
            })
            .then(response => {
                resolve(response);
            })
            .catch(err => {
                reject(err)
            })
    })
}

/**
 * 封装所有请求
 */
export function request(methed, url, data = {}, headers) {
    return new Promise((resolve, reject) => {
        instance({
                method: methed || 'post',
                url: url,
                params: methed === 'get' ? data : '',
                data: methed !== 'get' ? data : '',
                headers: headers || { 'Content-Type': 'application/json;charset=UTF-8' },
            })
            .then(response => {
                //对接口错误码做处理
                resolve(response.data);
            })
            .catch(err => {
                reject(err)
            })
    })
}

使用

import request from './axios'
export function getLogin(data) {
    return request({
        url: '/login',
        method: 'get',
        data
    })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值