如何在Nuxt.js中捕获并区分$fetch请求的HTTP状态码?

我在使用nuxt的$fetch请求接口时,后端返回401状态码,返回503状态码等,catch到的异常信息都是一样的,但是我需要根据响应状态码来作出相应的操作,求解我该怎么办?
我的请求代码写在onMounted周期方法中:

  try {
    $fetch<ApiResponse<StrokePO>>('/stroke/api/list',{
      baseURL:useRuntimeConfig().public.baseURL,
      method:'POST',
      body:{role:'0'},
      onRequestError:({request})=>{
        console.log(request);
      },
      onResponse:({response})=>{
        console.log(response.status);
      },
      onResponseError:({response})=>{
      console.log(response.status);
      }
    }).then((res)=>{
      results.value = res.data
    })
  }catch(err) {
    console.log(err)
  }

后端未认证写法:

if (StringUtils.isEmpty(sessionToken)) {
                // 响应未认证!
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                // 结束请求
                return response.setComplete();
            }
            SessionContext context = redisSessionHelper.getSession(sessionToken);
            boolean isisValid = redisSessionHelper.isValid(context);
            //session已经失效
            if (!isisValid) {
                // 响应未认证!
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                // 结束请求
                return response.setComplete();
            }

浏览器控制台报错:
image.png

我尝试在onResponseError回调中获取401状态码,但是在浏览器401之后,这个回调并没有被触发,但是触发了onRequestError回调,然而这并不能取到401状态码,在catch块中取不到401状态码的相关信息,我也尝试了使用nuxt的useError,但是也没能取到响应状态码,我的具体做法是在catch块中使用useError().value?.statusCode,但结果是undefined,请问大神们哪里出错了或者有什么解决方案吗(补充信息:nuxt的$fetch使用的是ofetch项目,但是我翻看之后仍未解决问题,nuxt版本:"nuxt": "^3.15.1")

阅读 838
1 个回答

跨域了,后端加 CORS 头。

正常来说出错的错误码肯定是不同的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏