当前位置: 首页 > article >正文

响应拦截器的判断

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

1. res.status

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

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

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

示例:
// 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 值进行相应的处理。

// 后端返回的自定义业务代码
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):检查具体的业务逻辑是否成功(比如登录是否成功、数据是否有效)。

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

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

正确处理方式如下:

// 首先检查 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 来传递详细的业务结果。

http://www.kler.cn/a/389408.html

相关文章:

  • ArkTs简单入门案例:简单的图片切换应用界面
  • Vue 3 介绍及应用
  • win32 / WTL 开发多线程应用,子线程传递大对象给UI线程(主窗口)的方法
  • Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
  • 机器学习——贝叶斯
  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
  • pytorch register_buffer介绍
  • SIwave:释放 SIwizard 求解器的强大功能
  • 二叉树(C 语言)
  • 关于 spring boot - application.yml 加载顺序
  • LabVIEW实验室液压制动系统
  • L2 级智能驾驶车辆随时间变化的HMI系统提示效果研究
  • AI 写作(六):核心技术与多元应用(6/10)
  • 【科研积累】大模型的认知笔记
  • 【Python爬虫实战】全面解析 DrissionPage:简化 Python 浏览器自动化的三种模式
  • 使用亚马逊 S3 连接器为 PyTorch 和 MinIO 创建地图式数据集
  • MySQL之索引(3)(索引基本语法、SQL执行计划、常见索引失效原因与解决方法)
  • 使用Hutoo库HttpRequest工具类调用MultipartFile参数接口
  • 『Django』初识DRF
  • python语言基础-4 常用模块-4.5 hashlib模块与base64模块
  • 一台手机如何录制播客——程序员也可玩转播客
  • vue openlayers一些图层操作(获取指定名字的图层等)
  • 无线局域网四种类型
  • 基于JSP网上书城的设计与实现
  • QJson-趟过的各种坑(先坑后用法)
  • 前端简明教程--初体验