响应拦截器的判断

在写响应拦截器的时候,通常会对状态码进行判断,但是这个时候就会有个问题,res.statusres.data.code都可以说是状态码,这个时候用哪个来进行判断呢?本文为你讲解这个问题

1. res.status

res.status 是 HTTP 响应的状态码,它表示的是 HTTP 请求的总体处理结果。它是由服务器返回的一个数字,通常用来判断请求是否成功。例如:

  • 200:请求成功,服务器正常返回响应。
  • 201:资源已成功创建。
  • 400:请求参数错误(客户端请求问题)。
  • 401:未授权,用户未登录或权限不足。
  • 404:资源未找到。
  • 500:服务器内部错误。

这些状态码是 HTTP 协议的一部分,用来描述服务器处理请求的结果。

示例:
js 复制代码
// HTTP响应的状态码
res.status === 200  // 请求成功
res.status === 404  // 请求的资源未找到

2. res.data.code

res.data.code 通常是由后端在响应体内返回的自定义字段,它代表了后端业务处理的结果。这个字段并非 HTTP 协议的一部分,而是后端根据业务需求定义的,通常用于描述特定的业务逻辑结果或状态。

  • res.data.code 可能是一些数值或字符串,用来表示业务层面的操作是否成功,或者包含错误信息。

  • 比如,

    code
    

    字段可能会在以下情况下返回:

    • 0200:表示请求的业务操作成功。
    • 1500:表示某个业务逻辑错误或系统内部错误。
    • 其他数字:可能代表特定的业务错误码,比如用户不存在、密码错误等。

res.data.code 主要用于判断业务逻辑是否成功,并根据不同的 code 值进行相应的处理。

js 复制代码
// 后端返回的自定义业务代码
if (res.data.code === 200) {
  // 登录成功
} else if (res.data.code === 401) {
  // 未授权,跳转到登录页面
} else {
  // 其他错误,根据code处理
  console.error('错误码:', res.data.code);
}

3. res.statusres.data.code 的区别

  • res.status:是 HTTP 协议中的标准状态码,表示 HTTP 请求的整体处理状态,主要用于判断请求是否成功发送到服务器并且有正确的响应返回。
  • res.data.code:是后端业务逻辑中的自定义状态码,用来描述业务操作的成功或失败。它通常包含更详细的业务信息,比如用户输入错误、权限问题、操作成功等。

通常情况下,需要同时检查这两个值来判断请求的结果:

  1. HTTP 状态码 (res.status):检查网络请求是否成功(比如是否网络连接正常,是否得到响应)。
  2. 业务码 (res.data.code):检查具体的业务逻辑是否成功(比如登录是否成功、数据是否有效)。

假设你在前端发送了一个登录请求,并且后端返回了以下响应:

js 复制代码
{
  "status": 200, 
  "message": "登录成功", 
  "data": {
    "code": 0,
    "userId": 10966,
    "token": "6630e5a6e217ace0decd014050b30ec8"
  }
}

正确处理方式如下:

js 复制代码
// 首先检查 HTTP 状态码
    if (response.status !== 200) {
      throw new Error('网络请求失败');
    }

    // 然后检查业务逻辑状态码
    if (response.data.code !== 0) {
      throw new Error('登录失败,错误代码: ' + response.data.code);
    }

    // 如果没有错误,则返回响应数据
    return response.data;

  } catch (error) {
    console.error('请求失败:', error);
    throw error; // 重新抛出错误以便在调用处捕获
  }

如果顺序弄反了,很有可能就会出现后端提示响应成功,但是前端响应拦截器却捕捉到了错误

总结:

  • res.status:用来判断 HTTP 请求的状态,告诉你请求是否成功(如 200 表示成功,500 表示服务器错误)。
  • res.data.code :是后端业务逻辑中的状态码,通常用来表示具体的操作是否成功或失败。根据不同的业务场景,后端可以自定义不同的 code 来传递详细的业务结果。
相关推荐
2401_857600953 分钟前
SSM 与 Vue 共筑电脑测评系统:精准洞察电脑世界
前端·javascript·vue.js
2401_857600953 分钟前
数字时代的医疗挂号变革:SSM+Vue 系统设计与实现之道
前端·javascript·vue.js
GDAL4 分钟前
vue入门教程:组件透传 Attributes
前端·javascript·vue.js
小白学大数据4 分钟前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具
2402_8575834914 分钟前
基于 SSM 框架的 Vue 电脑测评系统:照亮电脑品质之路
前端·javascript·vue.js
web1508509664144 分钟前
在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
前端·uni-app
Yvemil71 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
java_heartLake1 小时前
Vue3之性能优化
javascript·vue.js·性能优化
Swift社区1 小时前
HarmonyOS 实践 - 设计模式在代码中的作用
javascript
天涯学馆1 小时前
解锁WebAssembly与JavaScript交互的无限可能
前端·webassembly