Javascript axios拦截器响应未定义

Javascript axios拦截器响应未定义,javascript,vue.js,axios,interceptor,Javascript,Vue.js,Axios,Interceptor,我正在尝试注销我的用户,一旦他们获得401。我正在使用axios从api返回数据 我环顾四周,发现了相同的axios.interceptors.response axios.interceptors.response.use( response => response, error => { const {status} = error.response; if (status === 401 ) { store.dispatch('sna

我正在尝试注销我的用户,一旦他们获得401。我正在使用axios从api返回数据

我环顾四周,发现了相同的axios.interceptors.response

  axios.interceptors.response.use(
    response => response,
  error => {
    const {status} = error.response;
    if (status === 401 ) {
      store.dispatch('snackBar', snackbarObj)
    } 
   return Promise.reject(error);
  }
)
似乎我的错误。响应未定义。我不知道怎么了?有什么想法吗


您使用Axios执行的请求没有得到响应,因为在执行飞行前
选项
请求时,浏览器收到401个未经授权的响应,导致您尝试执行的请求出现网络错误

这与工作方式以及后端如何处理
选项
请求有关。要了解后端服务器应如何处理飞行前请求,了解

后端服务器不应检查
选项
请求的身份验证,它应验证该请求是否是向接受跨域请求的端点发出的,如果是,则返回成功代码

然后,浏览器将自动处理最初预期的请求

这样,如果用户不再经过身份验证,Axios拦截器将收到401错误代码



无耻的自我推广,我发布了一个简单的Axios插件,名为,它帮助在更大的应用程序中抽象Axios拦截器的使用。它提供了一个在重新发送请求之前再次尝试身份验证的示例。

如果飞行前
选项
请求成功结束,响应对象也将未定义,但下一次
获取/发布
的响应不包含
访问控制允许来源
http头


在我的例子中,为nginx 401响应添加
访问控制允许来源
头解决了问题

这不是最佳做法,但我是这样解决的

axios.interceptors.response.use(
        response => response,
      error => {
        if (typeof error.response === "undefined") {
          // do somthing
        } 
       return Promise.reject(error);
      }
    )

对于仍在努力解决此问题的用户,请使用以下错误处理以更好地控制

if (error.response) {
  // Request made and server responded
  console.log(error.response.data);
  console.log(error.response.status);
  console.log(error.response.headers);
} else if (error.request) {
   // The request was made but no response was received
   console.log(error.request);
} else {
   // Something happened in setting up the request that triggered an Error
   console.log('Error', error.message);
}
return Promise.reject(error);

后端应该如何处理它?我在邮件头中发送一个令牌。因此,在浏览器控制台上,它会在上面的图像和网络选项卡上的响应中显示它的内容,“jwt验证失败”-ronoc4 7小时前delete@ronoc4我用飞行前请求的附加信息更新了我的答案。没用,因为整个问题是:我们缺少信息来
//做些什么
如果响应是
未定义的
,非常感谢,这是一个很好的解决方案,我也面临着同样的问题,并通过设置访问控制允许从express开始。