ai问答:使用 Vue3 组合式API 和 TS 配置 axios 拦截器 http错误状态
通过 axios.create() 可以创建一个 axios 实例 axiosInstance,参数如下:
- baseURL:请求前缀
 - timeout:超时时间
 - headers:请求头
 
默认配置:
import { defineComponent } from 'vue'
import axios from 'axios'
export default defineComponent({
  setup() {
    // 实例 - 默认配置
    const axiosInstance = axios.create({
      baseURL: 'https://some-domain.com/api/',
      timeout: 1000,
      headers: {
        Authorization: 'Bearer some-token'
      }
    })
    // 简单封装 - get
    function get(url: string) {
        return axiosInstance.get(url).then(res => {
            console.log(res.data)
            return res
        }).catch(err => {
            console.log('Axios error:', err.message)
            return err
        })
    }
    // 暴露其他方法 ...
    return {
      get
      // ...
    }
  }
})
然后,get、post等方法调用的都是这个 axios 实例,所有请求都会默认使用这些配置。
这可以使我们实现诸如:
- 不同环境使用不同 baseURL
 - 需要鉴权的请求自动添加 Authorization 请求头
 - 配置统一的超时时间避免请求延迟
 
axios 支持通过 axios.interceptors 配置拦截器。
添加了请求拦截器后,每次调用 axiosInstance 发出的请求都会先通过请求拦截器。
我们可以在这里做一些公共的操作,如:
- 添加请求头
 - 显示加载动画
 - 存储请求日志等
 
// 拦截器 - request 请求
axiosInstance.interceptors.request.use(config => {
    let test = {
        vue_token: 'Abc123',
        type: 'json'
    };
    if (test.vue_token) {
        config.headers['Authorization'] = `Bearer ${test.vue_token}`
    }
    if (test.type === 'json') {
        config.headers['Content-Type'] = 'application/json;charset=UTF-8'
    }
    if (test.type === 'file') {
        config.headers['Content-Type'] = 'multipart/form-data'
    }
    return config;
}, err => {
    console.log(err)
    return err
});
在 axios 响应拦截器中检测响应状态码,并在状态码不正确时抛出错误,每次请求得到非 200-300 状态码的响应时,响应拦截器会抛出一个错误,我们可以在请求方法中使用 catch捕获此错误。
在拦截器中对常见的 HTTP 错误状态码做不同处理,例如:
- 401 UNAUTHORIZED:未登录,跳转登录页
 - 403 FORBIDDEN:无权限
 - 404 NOT FOUND:资源不存在
 - 500 INTERNAL SERVER ERROR:服务器内部错误等
 
添加了响应拦截器后,每次请求的响应都会先通过此拦截器。
我们可以在这里做一些公共的操作,如:
- 处理响应数据
 - 显示/隐藏加载动画
 - 校验响应状态码是否正确
 - 存储响应日志等
 
// 拦截器 - response 响应
axiosInstance.interceptors.response.use((response) => {
    const status = response.status
    if (status === 401) {
        // 未登录,跳转登录页
        window.location.href = '/login'
    } else if (status >= 400 && status < 500) {
        throw Error(`Client error! Status: ${status}`)
    } else if (status >= 500) {
        throw Error(`Server error! Status: ${status}`)
    }
    return response
})
现在如果 get请求得到非正常状态码的响应,就会进入 catch 捕获错误信息。
这些拦截器方便我们处理每一个请求响应周期中的逻辑,减少冗余代码。
拦截器是 axios 中很强大的功能,可以大大提高我们封装 axios 的能力。
ai问答:使用 Vue3 组合式API 和 TS 配置 axios 拦截器 http错误状态的更多相关文章
- vue3组合式API
		
vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...
 - [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处
		
前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...
 - 解决WebStorm无法正确识别Vue3组合式API的问题
		
1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信Web ...
 - vue3组合式API介绍
		
为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...
 - Vue3 组合式 API 中获取 DOM 节点的问题
		
模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...
 - 第三十五篇:vue3,(组合式api的初步理解)
		
好家伙, 来一波核心概念:数据劫持是响应式的核心 1.由set up开始 (1)vue3中的一个新的配置项,值为一个函数. (2)组件中所用的到的:数据,方法,计算属性均要配置在set up中. (3 ...
 - Springboot 三种拦截Rest API的方法-过滤器、拦截器、切片
		
过滤器方式实现拦截(Filter) 通过继承Servlet的Filter类来实现拦截: @Component public class TimeFilter implements Filter { @ ...
 - Vue3笔记(二)了解组合式API的应用与方法
		
一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...
 - 一篇文章讲明白vue3的script setup,拥抱组合式API!
		
引言 vue3除了Composition API是一个亮点之外,尤大大又给我们带来了一个全新的玩意 -- script setup,对于setup大家相信都不陌生,而对于script setup有些同 ...
 - Vue3全局APi解析-源码学习
		
本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...
 
随机推荐
- ubuntu主机连接家里的网线
			
第一步,先让物理机连接网络: 注释掉/etc/network/interfaces文件的最后一行,即: 意思是不要手动设置网络了,而是转为自动设置.这样,主机就可以联网了. 参考链接:https:// ...
 - Serverless 遇到 FinOps: Economical Serverless
			
Serverless 遇到 FinOps: Economical Serverless 摘要:本文基于 FunctionGraph 在 Serverless 领域的 FinOps 探索和实践,提出业界 ...
 - el-admin登录详解
			
1.进入登陆界面后,就会自动获取验证码. 2.前端访问auth/code接口获取后端生成的验证码(包括uuid,img,结果值),然后放入redis,设置2分钟过期,并返回识别码.图片url给前端. ...
 - Docker-界面化
			
docker-ui docker-ui只能便于我们查看系统的相关信息,镜像或者容器.在界面上做简单的处理,可处理单机版Docker. docker pull uifd/ui-for-docker do ...
 - 【问题解决】Nacos服务端NVDB-CNVDB-2023674205漏洞
			
缘起 最近(2023.03.13)客户现场要求自检有无使用Nacos,原因是Nacos存在认证绕过高危漏洞,其漏洞代码NVDB-CNVDB-2023674205,本文就简单说一下这个事儿,以及如何解决 ...
 - Python学习笔记--第二阶段啦
			
初识对象 示例: 类的成员方法 上图中的self必须填写!!! 示例: 类和对象 有c和c++语言基础的话,就会发现其实是一样的道理,只是实现代码有差异 构造方法(init) 示例: 注意: 其他内置 ...
 - 分布式 WEB应用中Session(会话管理)的变迁之路
			
一.Session 介绍 Session 一词直译为 "会话",意指有始有终的一系列动作/消息.Session 是 Web 应用蓬勃发展的产物之一.在 Web 应用中隐含有&quo ...
 - 宝塔上部署FastAPI的步骤和一些注意点
			
为了运维方便,选择直接用宝塔来管理python fastapi的项目,虽然直接部署可能性能更好更灵活,但是我选择了低层本,每个人的选择可能是不一样的,各有 考虑吧. 本文的大逻辑是先写一个hellow ...
 - Anconda、Pycharm下载、安装、配置教程(极其详细)
			
Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大( ...
 - wireshark抓包教程详解
			
https://blog.csdn.net/lixinkuan328/article/details/122985439 Wireshark 的抓包和分析,看这篇就够了!:https://blog.c ...