【问题标题】:Accessing Axios error codes in interceptor在拦截器中访问 Axios 错误代码
【发布时间】:2020-07-20 19:23:56
【问题描述】:

在客户端 JavaScript/React/etc 中使用 axios 响应拦截器时,如何访问如下错误代码:

  • ERR_CONNECTION_REFUSED(API 服务器已关闭)
  • ERR_INTERNET_DISCONNECTED(本地网络已关闭)

我注意到axios/lib/adapters/xhr.js 将这些代码打印到控制台,但我似乎无法自己在响应拦截器中访问它们?

代码:

axios.interceptors.response.use(null, (error) => {

    console.log(error.???);

    return Promise.reject(error);
}

注意:关键是在向用户显示错误消息时能够区分“您的互联网已关闭”和“我们的 API 已关闭”。

【问题讨论】:

    标签: javascript reactjs axios


    【解决方案1】:

    您可以像error.response.status 这样获得状态,但编写安全代码,因为它并不总是正确的。如果是 502,error.response 是未定义的,会中断

    这里是你可以如何处理你的错误

    axios.interceptors.response.use(null, (error) => {
      if (error.message === 'Network Error') {
        if (error?.response?.status') === 504) {
          throw {
            message: 'Something went wrong. Please try again later.',
          };
        } else {
          throw {
            message: 'You are not connected to the internet. Verify your connection and then try again.',
          };
        }
      }
      if (error.response) {
        if (error.response.status === 500) {
          throw {
            message: 'Something went wrong. Please try again later.',
          };
        }
        if (error.response.status === 401) {
          // logout logic
        }
        if (error.response.status === 403) {
          // redirect user to some home page since that action is not allowed
        }
        throw { ...error.response.data, statusCode: error.response.status };
      }
      throw {
        message: 'Something went wrong. Please try again later.',
      };
    });

    【讨论】:

    • 谢谢,但恐怕这并不能回答问题。我想按照说明阅读ERR_ 代码。使用您的代码,它会打印“您未连接到互联网。验证您的连接,然后重试。”,即使我已连接并且 API 已关闭。在向用户显示错误消息时,我希望能够区分“您的互联网已关闭”和“我们的 API 已关闭”。
    猜你喜欢
    • 2018-04-25
    • 2021-10-11
    • 2021-11-07
    • 2019-02-11
    • 2020-09-16
    • 2019-10-22
    • 2020-03-08
    • 2018-09-12
    • 2022-11-20
    相关资源
    最近更新 更多