Skip to content

请求拦截器

  • 拦截器:在可以在请求之前额外添加参数
  • 拦截器:在可以在请求之后统一处理返回结果

安装

bash
pnpm install axios

使用

  • 拦截器配置,创建 src/utils/request.ts,复制下面代码
ts
import axios from 'axios'
import { ElNotification } from 'element-plus'
import router from '../router'
//例如axios对象的create方法,去创建axios实例
let request = axios.create({
    //配置接口地址
    baseURL: import.meta.env.VITE_APP_API_URL,
    //配置超时时间
    timeout: 6000,
});
//拦截器-请求之前
request.interceptors.request.use((config) => {
    //config配置对象,headers属性请求头,给服务器端公共参数
    config.headers['Authorization'] = '';
    config.headers['Content-Type'] = 'application/json;charset=UTF-8';
    return config;
})
//拦截器-请求之后
request.interceptors.response.use((response) => {
    //成功回调
    // 对响应数据做点什么
    if (response.data.code == -2) {
        //清除cache
        localStorage.clear();
        ElNotification.error("登录失效,请重新登录!")
        setTimeout(function () {
            //跳转
            router.push({
                path: "/"
            });
        }, 500)
    }
    return response.data;
}, (error) => {
    //失败回调:处理http网络错误
    let message = "未知错误!";
    let status = error.response.status;
    switch (status) {
        case 401:
            message = "TOKEN过期"
            break;
        case 403:
            message = "无权访问"
            break;
        case 404:
            message = "请求地址错误"
            break;
        case 500:
            message = "服务器出现问题"
            break;
    }
    ElNotification({
        type: "error",
        message: '[' + status + ']' + message,
    })
    return Promise.reject(error);
})
export default request;