@dronephon/request
v1.0.0
Published
基于 Axios 封装的请求库
Readme
@dronephon/request
基于 Axios 的请求库封装
配置
单个请求配置
interface RequestOptions extends AxiosRequestConfig {
/**
* 忽略重复请求
*/
ignoreCancelToken?: boolean;
/**
* 是否携带token
*/
withToken?: boolean;
/**
* 是否提示错误信息
*/
skipErrorHandler?: boolean;
}
interface RequestOptionsWithResponse extends RequestOptions {
getResponse: true;
}
interface RequestOptionsWithoutResponse extends RequestOptions {
getResponse: false;
}全局请求配置
CreateRequestOptions extends RequestOptions {
/**
* token前缀
*/
authenticationScheme?: string;
/**
* 获取token方法
*/
getToken?: () => string;
errorConfig?: {
errorHandler?: IErrorHandler;
errorThrower?: (res: ResponseData) => void;
};
requestInterceptors?: IRequestInterceptorTuple[];
responseInterceptors?: IResponseInterceptorTuple[];
}使用示例
import { createRequest } from '@dronephon/request';
let refreshToken = false;
const request = createRequest({
baseURL: '/api/xxxxx',
getToken: () => 'token',
errorConfig: {
errorHandler: (error, opts) => {
// 401状态码不可跳过错误处理
if (error.response?.status === 401 && !refreshToken) {
refreshToken = true;
console.log('token过期了');
return;
}
// 跳过错误处理、取消请求
if (opts?.skipErrorHandler) throw error;
// 通用处理
console.log(error.message);
},
errorThrower: (res) => {
const { code, msg } = res;
if (code !== 200) {
const error: any = new Error(msg);
error.name = 'BizError';
error.info = { errorCode: code, errorMessage: msg };
throw error;
}
}
},
});