Vue axios库避免重复发送请求的示例介绍

发布时间:2023-03-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Vue axios库避免重复发送请求的示例介绍脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

目的

  • 实现请求拦截
  • 实现响应拦截
  • 常见错误处理
  • 不能请求头设置
  • api 集中式管理

(取消重复请求,重复发送请求, 请求缓存等情况均还未实现)

文件结构

实现

index.js内代码如下:

引入

// 引入 axios
import axios From 'axios';
// 请求配置单独写一个文件 baseurl.js
import serverconfig from './baseurl.js'

创建一个实例

const serviceAxios = axios.creat({
	baseURL: serverConfig.baseURL, //基础请求地址
    timeout: 1000 , //请求超时设置
    wIThCredentials: false, // 跨域请求是否需要携带 cookie 
})

请求拦截

serviceAxios.interceptors.request.use(
    (config) => {
        console.LOG("请求配置", config);
        // 是否使用 Token, 
        if(serverConfig.useTokenAuthorization) {
            config.headers["Authorization"] = localStorage.getItem("token");
        }
        // 设置请求头
        if(config.method === "post") {
            config.headers["content-tyPE"] = "application/x-ww-form-urlencoded";
            // config.data = qs.stringify(config.data); //序列化  效果等同于下行代码
            config.requestType = "form"
        } else {
            config.headers["content-type"] = "application/json"
        }
        // 返回
        return config
    },
    (error) => {
        PRomise.reject(error)
    }
)

响应拦截

serviceAxios.interceptors.response.use(
    (res) => {
        console.log("响应拦截", res);
        let data = res.data;
        // 处理自己的业务逻辑,如 token 是否过期...
        return data;
    },
    (error) => {
        let message = ""
        if(error && error.response) {
            switch (error.response.status) {
                case 302: 
                    message = "接口重定向了! ";
                    break;
                case 400:
                    message = "参数不正确! ";
                    break;
                case 401:
                    message = "您未登录, 或者登录已经超时, 请先登录! "
                    break;
                case 403:
                    message = "您还没有权限操作! ";
                    break;
                case 404:
                    message = `请求地址出错: ${error.response.config.url}`;
                    break;
                case 408:
                    message = "请求超时! ";
                    break;
                case 409:
                    message = "系统已存在相同数据! "
                    break;
                case 500:
                    message = "服务器内部错误! "
                    break;
                case 501:
                    message = "服务未实现! "
                    break;
                case 502:
                    message = "回答错误! "
                    break;
                case 503:
                    message = "服务不可用"
                    break;
                case 504:
                    message = "服务暂时无法访问, 请稍后再试"
                    break;
                case 505:
                    message = "HTTP 版本不受支持! "
                    break;
                default:
                    message = "异常问题, 请联系管理员! "
                    break;
            }
        }
        return Promise.reject(message);
    }
);

取消重复发送请求

实现思想

唯一标识值 : 每次发起请求的时候根据请求的方式,请求URL,请求携带参数设置一个唯一标识值.

请求队列: 创建一个map对象储存请求的唯一标识值.

每次发送请求的时候, 在请求拦截中判断请求队列中是否存在这个请求, 存在就说明这个请求正在进行中,那么就取消正在发送的请求,重新发送请求; 不存在就将本次请求加入请求队列中.

在响应拦截中将本次请求从请求队列中移除.

脚本宝典总结

以上是脚本宝典为你收集整理的Vue axios库避免重复发送请求的示例介绍全部内容,希望文章能够帮你解决Vue axios库避免重复发送请求的示例介绍所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。