Skip to content

拦截器

Axle 提供了实用的请求/响应拦截器,兼容 axleaxios

引入

ts
import {
  requestHeadersInterceptor,
  requestMockInterceptor,
  requestMd5Interceptor,
  responseRetryInterceptor,
  responseStatusInterceptor,
  responseBlobInterceptor,
} from 'rattail/axle'

在 Axle 中使用

ts
axle.useRequestInterceptor(
  requestHeadersInterceptor({
    headers: () => ({
      token: localStorage.getItem('token'),
    }),
  }),
)

axle.useResponseInterceptor(responseRetryInterceptor({ count: 3 }))

在 Axios 中使用

ts
const {
  onFulfilled,
  onRejected,
  options,
} = responseRetryInterceptor({ count: 3 })

axios.interceptors.response.use(onFulfilled, onRejected, options)

通用参数

所有内置拦截器接受以下公共选项:

参数描述类型
include仅对匹配的请求应用拦截器FilterPattern[]
exclude跳过匹配的请求FilterPattern[]
axiosInterceptorOptions传递给 axios 拦截器注册的选项object

include & exclude

每个内置拦截器都支持 includeexclude 进行请求过滤,支持以下模式:

  • method:xxx — 按 HTTP 方法匹配(如 method:getmethod:post
  • Glob 语法 — 按 URL 模式匹配(如 /user/**/system/*
  • status:xxx — 按响应状态码匹配(如 status:500status:401
  • 函数 — 自定义匹配逻辑 (config) => boolean
ts
axle.useResponseInterceptor(
  responseRetryInterceptor({
    count: 3,
    include: ['method:put', 'method:post', 'status:500'],
    exclude: ['/system/**', '/user/addUser', 'status:400'],
  }),
)

内置拦截器列表

名称描述
requestHeadersInterceptor自定义请求头
requestMockInterceptor模拟数据
requestMd5Interceptor对参数和请求头进行 MD5 计算
responseRetryInterceptor请求失败重试
responseStatusInterceptor按状态码拦截
responseBlobInterceptor拦截 Blob 响应