Skip to content

扩展插件满足自己的业务需求

如介绍所说,aplus场景都不能满足你的需求,那就聊聊基于aplus-axios-core的插件需要如何扩展,aplus-axios-core对外一共暴露了4个"生命周期钩子"分别是请求前请求前发生错误,返回结果前返回结果发生错误

插件的基本结构

ts
// demo index.ts
import type { VAxiosPlugin } from '@aplus-frontend/axios-core';
type demoConfig = {
  customKey: '自定义插件属性';
};
export function demoPlugin(demoConfig: demoConfig): VAxiosPlugin {
  return {
    pluginName: 'demoPluginName',
    requestInterceptors: (config, options, axiosInstance) => {
      console.log(`请求前干一些什么事`);
      return config;
    },
    requestInterceptorsCatch: (error) => {
      console.log(`请求前发生错误干一些什么事`);
    },
    responseInterceptors: (axiosInstance, AxiosResponse, requestOptions) => {
      console.log(`请求返回前干一些什么事`);
      return AxiosResponse;
    },
    responseInterceptorsCatch: (axiosInstance, error, requestOptions) => {
      console.log(`请求返回后发生错误干一些什么事`);
    }
  };
}

一个基于aplus-axios-core扩展的插件如上所示,插件的入口必需是一个函数,其中demoConfig根据自己实际业务需求传入的配置,该函数必须返回一个包含pluginName插件名字的对象,aplus-axios-core内部在外部调用use方法的时候会根据插件名字判断是否已使用过该插件,一个插件只在内部注册一次。requestInterceptors必须返回config(请求发生时所有的设置),responseInterceptors必须返回AxiosResponseAxiosResponse这个东西就是原始axios返回的response

插件类型

属性描述类型是否必须
pluginName插件名称string,推荐的命名方式demo-plugin-name
requestInterceptors请求前被调用,可以用来发起请求前修改请求配置(config: InternalAxiosRequestConfig, options: CreateAxiosOptions, axiosInstance: AxiosInstance) => InternalAxiosRequestConfig; 其中的参数含义:InternalAxiosRequestConfig是axios原始请求配置,optionsaplus-axios-core包支持的配置项axiosInstance是原始axios实例
requestInterceptorsCatch请求前发生错误(error: Error) => void
responseInterceptors请求结果返回后被调用,可以用来修改返回的结果(axiosInstance: AxiosInstance, AxiosResponse: AxiosResponse, requestOptions: RequestOptions) => AxiosResponse<any> 其中的参数含义:axiosInstance是原始axios实例AxiosResponseaxios返回的结果,requestOptions当前请求配置
responseInterceptorsCatch请求返回发生错误后被调用,可以用来处理错误(axiosInstance: AxiosInstance, error: any, requestOptions: RequestOptions) => void

调用多个插件

使用use方法支持链式

ts
defHttp.use(basePlugin).use(otherPlugin);