当请求报错后提示多次,怎么让他提示一次?

在这里插入图片描述
像这样得提示很多边很烦那么

问题原因

当用户时间长了不操作时再次请求就会被后端认为token过期了需要重新登录,请求不到数据所以对用户进行提示,但是由于那个页面请求了多次不同的数据所以提示过多

问题分析

像这样肯定是请求出的问题所以我们往请求方面得文件去找,我这里是请求拦截这个文件出现得问题

import axios from "axios";
import { MessageBox, Message } from "element-ui";
import store from "@/store";
import { getToken, removeToken, getType, removeType } from "@/utils/auth";

window.axiosCancel = []
    // import { Decrypt, Encrypt } from "./utils.js";
    // create an axios instance
    // import qs from "qs";
axios.defaults.headers.post["Content-Type"] = "application/json;";
// import baseURL from "../main";

const service = axios.create({
  
	baseURL:"http://123221312/api/"

        // baseURL: "/api" //打包线上地址
        // baseURL: '/', // url = base url + request url
        // withCredentials: true // send cookies when cross-domain requests
        // timeout: 100000 // request timeout
});
console.log(axios.create({ baseURL: "http://124.88.68.242:9001/api/" }));
service.interceptors.request.use(config => {
    // let str = config.url;
    // // console.log(str.split('/'));
    config.cancelToken = new axios.CancelToken(cancel => {
        window.axiosCancel.push({ cancel });
    })
    if (store.getters.token) {
        config.headers["token"] = store.getters.token;
    } else {
        console.log("无token");
    }

    // if (
    //   Object.prototype.toString.call(config.data) !== "[object FormData]" &&
    //   config.method === "post"
    // ) {
    //   // 请求拦截器处理
    //   config.data = qs.stringify(config.data);
    // }

    // if (str.split("=")[1]) {
    //   config.url = str.split("=")[0] + "=" + Encrypt(str.split("=")[1]);
    // }

    return config;
});
// response interceptor响应拦截器
var flag = true;
watch: {
    flag: {
        if (!flag) {
            console.log("当");
            Message({
                type: "error",
                message: "请重新登录",
                offset: 200
            });
        }
    }
}
service.interceptors.response.use(
    /**
     * If you want to get http information such as headers or status
     * Please return  response => response
     */

    /**
     * Determine the request status by custom code
     * Here is just an example
     * You can also judge the status by HTTP Status Code
     */

    response => {
        const res = response.data;
        // console.log(res,'111')
        if (res.status == 200) {
            if (res.data) {
                flag = true
                if (res.p) {
                    // res.data = JSON.parse(Decrypt(res.data));
                    return res;
                } else {
                    // console.log( JSON.parse(Decrypt(res.data)))
                    // return JSON.parse(Decrypt(res.data));
                    return res;
                }
            } else {
                return res;
            }
        } else if (res.status == 300) {
            return res;
        } else {
            console.log(res, "111");
            if (res.status == 401) {
                localStorage.setItem("zhtoken", "");
                store.dispatch("user/resetToken");
                console.log("退出登录");
                location.href = "/#/login";
                flag = false;
                console.log("将flag变为false");
            }

            // Message.error(res.msg);
            return "";
        }


    },
    error => {
        console.log("err" + error); // for debug
        Message({
            type: "error",
            message: res.msg,
            offset: 200
        });
        return Promise.reject(error);
    },


);
setTimeout(() => {
    if (flag) {
        console.log(true);
    } else {
        console.log(false);
        Message({
            type: "error",
            message: "请重新登录",
            offset: 200
        });
        flag = true
    }
}, 2000)

export default service;

代码分析先定义一个值如果失败之后改变值得状态然后进行提示至于为什么在setTimeout延时里就只提示一次我也不知道希望有大佬评论一下大家一起学习
其实我本来是想用计算属性得但是没有成功

### 回答1: 网络请求报错 code = 1002 通常表示 WebSocket 连接关闭的异常,可能是因为网络中断、服务器关闭或其他原因导致 WebSocket 连接失败。解决此问题的方法主要有以下几种: 1. 检查网络连接是否正常,确保网络连接稳定。 2. 检查服务器是否正常工作,可以尝试使用其他网络设备或浏览器连接服务器,或联系服务器管理员排查问题。 3. 确认 WebSocket 协议是否正确,可以查看相应的文档或代码,检查协议是否符合规范。 4. 尝试使用其他 WebSocket 客户端或库进行连接,比如使用 Python 的 websocket 库或 JavaScript 的 WebSocket API 等。 5. 如果以上方法都无法解决问题,可以尝试重新启动客户端或服务器,或者重新编写代码进行调试。 ### 回答2: 网络请求报错 code = 1002 是指在进行网络请求时,服务器返回了一个错误码为1002的响应。这种错误通常表示客户端请求的参数或格式不正确,服务器无法正确处理请求。 要处理这个错误,我们可以按照以下步骤进行: 1. 检查网络连接:首先,我们需要确保设备与服务器的网络连接正常,确认网络稳定性,可以尝试重新连接网络或切换到其他网络。 2. 检查请求参数:错误码1002通常意味着客户端请求的参数或格式不正确。我们需要仔细检查请求的参数是否符合服务器的要求。可以检查请求的URL、请求方法(GET、POST等)、请求头、请求体等。确保请求参数的类型、格式、长度等都符合服务器的要求。 3. 检查请求头信息:某些情况下,服务器在处理请求时会根据请求的头信息进行判断和处理。我们需要检查请求的头信息是否正确,包括Content-Type、Authorization等。 4. 处理错误响应:在接收到错误码为1002的响应时,我们需要对错误进行处理。可以根据错误码进行相应的处理逻辑,比如重新发送请求提示用户输入正确的参数、调整请求格式等。同时,我们也可以根据服务器返回的错误信息进行精确定位和解决问题。 5. 联系服务器管理员或开发人员:如果以上步骤都没有解决问题,我们可以联系服务器的管理员或开发人员,向他们反馈具体的错误信息和请求情况,寻求更详细的帮助和解决方案。 总之,处理网络请求报错code=1002的关键在于仔细检查请求参数和格式是否正确,并根据具体情况调整请求、处理错误响应。 ### 回答3: 网络请求报错 code = 1002 通常表示客户端请求出现了一些问题,以下是一些常见的处理方法: 1. 检查网络连接: 首先要确保网络连接正常,可以尝试刷新页面或者重新连接网络。如果使用的是Wi-Fi网络,可以尝试切换到移动数据网络或者连接其他可用的Wi-Fi网络。 2. 检查请求参数: code = 1002 可能是因为客户端发送的请求参数有误。需要仔细检查请求中的参数是否正确、完整,并且按照接口文档的要求进行填写。 3. 重新请求: 如果经过检查网络连接和请求参数之后依然出现 code = 1002 错误,可以尝试重新发送请求。有时候服务器可能会出现临时问题,重新发送请求可能会解决问题。 4. 检查服务器状态: 如果多次尝试之后仍然无法解决问题,可以考虑检查服务器的状态。可能是服务器出现了故障或者维护,导致无法正常处理请求。可以联系后端开发人员或者系统管理员进行排查和修复。 5. 查看错误日志: 如果有日志系统记录了请求错误的详细信息,可以查看相应的错误日志来获取更多的错误细节。根据错误日志提供的信息,可以更准确地判断和解决问题。 总之,处理网络请求报错 code = 1002 需要从网络连接、请求参数、重新请求、服务器状态和错误日志等方面进行综合考虑,逐一排查和解决可能的问题,最终找到引起报错的具体原因并修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值