一个轻量级的 API 请求封装库,支持 Axios 和 Fetch,提供更便捷的 API 调用方式。
npm install api-simplex-handler
或使用 Yarn:
yarn add api-simplex-handler
import { ApiFactory } from "api-simplex-handler";
const hanger = (api) => {
console.log(api)
/**
* @type {Hanger<api>}
*/
return {
before(args){
console.log('before:',args)
return args
},
after(res){
console.log("after",res)
return res.then(({data,info})=>{
return {data,info}
})
},
complete(res){
console.log("complete",res)
return res;
},
guard(args,info,next){
info['guard'] = 'loading'
return next(args);
}
}
}
const apiFactory = new ApiFactory({
expectFunction: (res) => res.code === 200,
successFunction: (res) => {
ElMessage({
message: res.message,
type: 'success',
})
},
exceptionFunction: (res) => {
if (res.code === 401) {
ElMessage.error(`登录状态已过期,需要重新登录`)
router.replace('/login');
return
}
if (res.code === 403) {
ElMessage.error('您无此操作或访问的权限!')
return
}
if (res.code === 500) {
ElMessage.error('操作失败')
ElMessage.error('内部服务器发生错误,请联系服务器管理员')
return
}
ElMessage.error(`${res.message}`)
},
failFunction: (res) => {
ElMessage.error(`${res.message}`)
}
}, /** @type ApiConfig*/{
type: "axios",
config: axiosInstance
},hanger)
/**
*
* @type {IApiCollection}
*/
export default {
login: {
method: "post",
params: ['username', 'password']
},
register: {
method: "post",
params: ['username', 'password', 'email', 'code'],
paramsDefault: "body",
},
getById: {
method: "get",
params: ["id"],
cachePolicy: "dynamic",
limit: 1,
},
}
const userHandler = apiFactory.processApiCollection(user, baseApi + "users")
userHandler.login.sendNotSuccessTips({ //发送无成功提示的请求
username:'123',
password:'456'
}).then(({data,info})=>{
//处理返回内容
})
interface IApi {
//请求路径(默认使用key作为路径)
path?: string,
//方法(默认为get请求)
method?: string,
//请求参数定义
params?: IApiParamsCollection | string[],
//为未指定请求参数类型设置默认请求类型(默认的默认是查询参数)
paramsDefault?: "body" | "query" | "path",
//并发请求限制数量,默认不限制或者小于1为不限制
limit?: number,
//缓存策略 不缓存(默认)| 一直缓存|保存至本地持久化缓存|自动失效的缓存
cachePolicy?: "noCache" | "always" | "save" | "dynamic",
//设置为自动失效缓存的时间,默认30分钟
expirationTime?: number,
//缓存额外指定的key(一般没有用,主要用于解决防止持久化存储时的冲突)
cacheKey?: string,
//请求钩子,参考上述演示
hanger?: HangerIndex<this> | HangerIndex<this>[]
}
interface IApiHandler<T extends IApiParamsCollection | undefined | string[]> {
//发送不进行任何前后处理的请求,也不会执行自定以的hanger
send(args: ResolveParams<T>): Promise<ISendResponse<any>>;
//发送正常处理的请求,请求前后会执行自定义hanger以及响应解析responseHandlerFunction方法,可以重新设置本次请求的解析方法
sendHandler(args: ResolveParams<T>, responseHandlerFunction: ResponseHandlerFunction): Promise<SendHandlerResponse>;
//同sendHandler,但是会禁止成功请求后触发responseHandlerFunction请求成功的解析方法
sendNotSuccessTips(args: ResolveParams<T>): Promise<SendHandlerResponse>;
//获取请求路径
getURL(): string;
//拼装query或者path参数的请求路径
composeURL(args: ResolveParams<T>): string;
//清除缓存
clearCache(): void
}
MIT License. 详情请查看 LICENSE 文件。