AXIOS基于CORS的封装

该博客详细介绍了如何在Vue应用中配置和使用Axios库进行API请求,并结合Ant Design Vue的notification组件实现错误提示。内容包括设置请求拦截器添加token,响应拦截器处理不同状态码的错误,以及特定情况下如401未授权的处理方式。此外,还提供了用于文件上传的form表单提交方法。
摘要由CSDN通过智能技术生成
import axios from 'axios';
import {
    notification
} from 'ant-design-vue'
import Cookies from 'js-cookie'; // yarn add js-cookie
// 请求baseUrl
const BASE_URL = process.env.VUE_APP_REQUEST_BASE_URL

const initInstance = function (contentType) {
    let instance = axios.create({
        headers: {
            'content-type': contentType || 'application/json'
        },
        baseURL: BASE_URL,
        timeout: 30000,
        withCredentials: true //  每次请求携带用户凭证(cookie、HTTP身份验证和TLS客户端证书)
    })

    // 添加请求拦截器
    instance.interceptors.request.use(function (config) {
        // 请求头中添加 "X-Access-Token",服务器从中获取token
        config.headers["X-Access-Token"] = Cookies.get('token')
        return config
    }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error)
    })

    // 添加响应拦截器
    instance.interceptors.response.use(function (response) {
        if (+response.data.code !== 200) {
            notification.error({
                message: '系统提示',
                description: response.data.message,
                duration: 4
            })
        }
        return response.data
    }, err => {
        let code = err.response.status;
        let msg = "系统出现错误,请刷新页面重试!"
        switch (+code) {
            case 401:
                msg = "token已失效,请重新登录"
                setTimeout(() => {
                    window.location.href = "/login";
                }, 300);
                break;
        }
        notification.error({
            message: '系统提示',
            description: msg,
            duration: 4
        })
    })
    return instance;
}



export default function (url, params, methods = "post") {
    const instance = initInstance();
    return new Promise((resolve, reject) => {
        let req = null
        if (methods === 'post') {
            req = instance.post(url, params)
        } else {
            req = instance.get(url, {
                params: params
            })
        }
        req.then(res => resolve(res)).catch(err => reject(err))
    })
}
// 用于上传文件 用form表单提交
export const formSubmit = function (url, form) {
    const instance = initInstance("multipart/form-data");
    return new Promise((resolve, reject) => {
        let req = null
        req = instance.post(url, form)
        req.then(res => resolve(res)).catch(err => reject(err))
    })
}

服务器端点击这里食用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值