Skip to content
On this page

拦截器

可以设置全局或者局部拦截器用于在 ajax 实施前后进行拦截处理以便进行操作,或捕获错误

全局拦截器

在初始化实例时可选设置全局拦截器,此处拦截器将对该实例下的所有请求产生作用

在新建示例时设置拦截器

TypeScript
import Request from '@miramiya/request';
import type { CustomRequestConfig } from '@miramiya/request';

const request = new Request({
  baseURL: '',
  timeout: 6 * 1000 * 60,
  /**
   * 此处开始为拦截器设置
   */
  interceptors: {
    requestInterceptors: (config) => {
      // 此处可输入全局请求拦截器
      return config;
    },
    requestInterceptorsCatch: (error) => {
      // 此处可输入抛出全局请求拦截器错误
      return error;
    },
    responseInterceptors: (result) => {
      // 此处可输入全局响应拦截器
      return result;
    },
    responseInterceptorsCatch: (error) => {
      // 此处可输入抛出全局响应拦截器错误
      return error;
    },
  },
});

拦截器对应 type

接口 CustomRequestConfig 继承于 axiosAxiosRequestConfig AxiosResponse 接口,使拦截器享受 axios 对应类型约束及类型提示

TypeScript
import type { AxiosRequestConfig, AxiosResponse } from 'axios';

interface RequestInterceptors {
  // 发送前拦截器
  requestInterceptors?: (config: AxiosRequestConfig) => AxiosRequestConfig;
  // 捕获发送前错误拦截器
  // @ts-ignore
  requestInterceptorsCatch?: (error: any) => any;

  // 发送后拦截器
  responseInterceptors?: <T = AxiosResponse>(config: T) => T;
  // 捕获发送后错误拦截器
  // @ts-ignore
  responseInterceptorsCatch?: (error: any) => any;
}

interface CustomRequestConfig extends AxiosRequestConfig {
  interceptors?: RequestInterceptors;
}

局部拦截器

可以对任意初始化后的 api 接口处配置单独的拦截器

此处 type 类型请参阅 具体 API 类型接口

typescript
/**
 * 该API请求参数接口
 */
interface RequestBody {
  // 当前页码
  page: number;
  // 单页数据量
  size: number;
  // 搜索关键词
  search?: string;
}

/**
 * 该API响应参数接口
 */
interface ExtraResponseBody {
  data: Array<String>;
}

/**
 * 具体API地址
 */
const getListData = (data: RequestBody) => {
  return RequestExample<RequestBody, ExtraResponseBody>({
    url: "/api",
    method: "GET",
    data,
    // 局部拦截器,不设置将使用全局实例拦截器
    interceptors: {
      requestInterceptors: (config) => {
        // 此处可输入全局请求拦截器
        return config;
      },
      requestInterceptorsCatch: (error) => {
        // 此处可输入抛出全局请求拦截器错误
        return error;
      },
      responseInterceptors: (result) => {
        // 此处可输入全局响应拦截器
        return result;
      },
      responseInterceptorsCatch: (error) => {
        // 此处可输入抛出全局响应拦截器错误
        return error;
      },
    },
  });
};

优先级

全局拦截器将优先于局部拦截器

Released under the MIT License.