通过 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
// ...
}
}
})

然后,getpost等方法调用的都是这个 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错误状态的更多相关文章

  1. vue3组合式API

    vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...

  2. [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处

    前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...

  3. 解决WebStorm无法正确识别Vue3组合式API的问题

    1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信Web ...

  4. vue3组合式API介绍

    为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...

  5. Vue3 组合式 API 中获取 DOM 节点的问题

    模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...

  6. 第三十五篇:vue3,(组合式api的初步理解)

    好家伙, 来一波核心概念:数据劫持是响应式的核心 1.由set up开始 (1)vue3中的一个新的配置项,值为一个函数. (2)组件中所用的到的:数据,方法,计算属性均要配置在set up中. (3 ...

  7. Springboot 三种拦截Rest API的方法-过滤器、拦截器、切片

    过滤器方式实现拦截(Filter) 通过继承Servlet的Filter类来实现拦截: @Component public class TimeFilter implements Filter { @ ...

  8. Vue3笔记(二)了解组合式API的应用与方法

    一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...

  9. 一篇文章讲明白vue3的script setup,拥抱组合式API!

    引言 vue3除了Composition API是一个亮点之外,尤大大又给我们带来了一个全新的玩意 -- script setup,对于setup大家相信都不陌生,而对于script setup有些同 ...

  10. Vue3全局APi解析-源码学习

    本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...

随机推荐

  1. 使用npm包安装vant组件

  2. Go_day04

    Go基础语法 指针 指针式存储另一个变量内存地址的变量 &a 取出a的内存地址 *b 若指针b存放的式a的地址 那么 *b就直接指向a的内存 可以直接操作其中的值 指针的使用 func mai ...

  3. 记:crontab定时器读取env信息不全

    背景:  有这样一段代码,有两种执行方式:  crontab定时器.手动执行 #!bin.bash echo $redispasswd 你猜,结果一样不? 1.手动执行 2.crontab定时器 创建 ...

  4. HTML-CSS常用代码

    注释标签:对代码进行说明<!-- 单行注释,也可以对多行文字进行注释 -->常用格式标签<b>加粗</b> <i>斜体</i> <u& ...

  5. Win32窗口设置为透明

    可以使用以下方法将Win32窗口设置为透明: 定义窗口类时,在WNDCLASSEX结构体中设置hbrBackground成员为NULL. 在窗口创建时,使用WS_EX_LAYERED风格和SetLay ...

  6. 信创国产化,试试 Solon v2.2.2

    Solon 是一个高效的 Java 应用开发框架:更快.更小.更简单.它不是 Spring.没有用 Servlet.也无关 JavaEE,是一个有自己接口标准的开放生态.可以为应用软件国产化提供支持, ...

  7. progress监视linux命令进程

    progress监视linux命令进程 可以查看哪些命令进程 cp mv tar dd gzip cat grep 如何在ubuntu安装 sudo apt install progress 使用方法 ...

  8. 分析document文档中script标签获取抖音无水印视频

    思路分析 使用 playwright 模拟浏览器打开分享链接 获取 播放页面 html 信息 解析 播放页面的 video标签,video标签的src属性就是视频的地址 这种模式会触发抖音的风控机制 ...

  9. Docke 使用与详解1 --Tomcat

    一.Docker容器案例使用 --Tomcat安装与使用 1.Tomcat 安装 --docker tomcat镜像官网 1>使用docker pull tomcat拉取镜像,默认拉取最新版本: ...

  10. bpmnjs的基本使用(vue)

    bpmn-js在vue中的基本使用 效果: 下载依赖包 npm i bpmn-js bpmn-js-properties-panel camunda-bpmn-moddle "bpmn-js ...