扩展插件满足自己的业务需求
如介绍所说,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
必须返回AxiosResponse
。AxiosResponse
这个东西就是原始axios
返回的response
插件类型
属性 | 描述 | 类型 | 是否必须 |
---|---|---|---|
pluginName | 插件名称 | string ,推荐的命名方式demo-plugin-name | 是 |
requestInterceptors | 请求前被调用,可以用来发起请求前修改请求配置 | (config: InternalAxiosRequestConfig, options: CreateAxiosOptions, axiosInstance: AxiosInstance) => InternalAxiosRequestConfig; 其中的参数含义:InternalAxiosRequestConfig 是axios原始请求配置,options 是aplus-axios-core 包支持的配置项axiosInstance 是原始axios实例 | 否 |
requestInterceptorsCatch | 请求前发生错误 | (error: Error) => void | 否 |
responseInterceptors | 请求结果返回后被调用,可以用来修改返回的结果 | (axiosInstance: AxiosInstance, AxiosResponse: AxiosResponse, requestOptions: RequestOptions) => AxiosResponse<any> 其中的参数含义:axiosInstance 是原始axios实例 ,AxiosResponse 是axios 返回的结果,requestOptions 当前请求配置 | 否 |
responseInterceptorsCatch | 请求返回发生错误后被调用,可以用来处理错误 | (axiosInstance: AxiosInstance, error: any, requestOptions: RequestOptions) => void | 否 |
调用多个插件
使用use
方法支持链式
ts
defHttp.use(basePlugin).use(otherPlugin);