/// import type * as HTTP from '../types/http'; import type toast from '../utils/fn/toast'; import type HttpError from './HttpError'; interface BaseRequestConfig extends HTTP.RequestConfig { } /** * 全局请求配置. */ interface GlobalRequestConfig extends BaseRequestConfig { /** * 消息提示函数, 目前统一提示成功或者错误消息, 设置`undefined`关闭消息提示. * 如需单独针对成功或者错误提示, 请在`message`配置中处理. */ toast?: typeof toast; /** * 消息提示函数, 优先级高于`toast`, 可针对成功、错误单独处理. */ message?: { /** * 成功提示函数, `msg`选项为true时调用, 用于统一处理后端成功状态下消息提示. * 如果关闭`defaultResult`则不会调用, 可在响应拦截器中或者`finalResult`中自定义处理. */ success?: ( /** * 成功消息,通常为响应数据中`msg`或者`message`. */ msg: string) => void; /** * 错误提示函数, `errmsg`选项为true时调用. 处理整个请求中捕获的错误, 包括系统错误或者业务错误. */ error?: ( /** * 错误消息, 通常抛出错误会有具体的消息, 如果为业务错误通常为响应数据中`msg`或者`message`. * 也可以根据err参数自定义错误消息而不使用具体的错误消息. */ msg: string, /** * 错误对象. Error name `BizError`业务错误, `MiniError`小程序原生错误, `NetworkDisconnected`网络中断. */ err?: Error | HttpError) => void; }; /** * 统一错误处理函数, 包含请求和响应中捕获的错误, 比如系统错误或者业务错误. * 内部可直接`return`吃掉错误或者继续`throw`出去, throw请保持错误一致性为`Error`或者`HttpError`. * 如果定义了错误提示函数,throw出去的错误也会进入其中, 建议在错误提示函数中统一处理错误提示, * 不要在`errorHandler`中提示错误, 避免多次提示. 或者关闭`toast`和错误提示函数, 在`errorHandler`中单独处理错误提示. */ errorHandler?: ( /** * 错误对象. Error name `BizError`业务错误, `MiniError`小程序原生错误, `NetworkDisconnected`网络中断. */ err: Error | HttpError) => void; /** * 返回结果转换器, 用于在`defaultResult`中转换数据为`ResponseTemplate`结构. * 如果未配置结果转换器则返回原始data而非业务data. * 注:仅在使用`defaultResult`时`dataConverter`才起效, 响应拦截器之后执行. */ dataConverter?: (resp: HTTP.RawResponse) => HTTP.ResponseTemplate; /** * 默认响应结果为业务数据, 可设置`undefined`关闭默认逻辑, 同时会关闭`dataConverter`, 后续data则为原始数据. * 设置`resp`为true返回`[Data, RawData, RawResponse]`. * 注:响应拦截器之后执行. */ defaultResult?: ( /** * 原始响应. */ response: HTTP.RawResponse, /** * 请求配置. */ options: HTTP.RequestConfig, /** * 全局请求配置. */ globalConfig: GlobalRequestConfig) => D; /** * 最终响应结果, 建议默认业务数据, 可根据情况修改比如返回原始数据或者原始响应. * data maybe BizData, RawData, [undefined, RawData, RawResponse], * [BizData, RawRata, RawResponse]. * 注:响应拦截器和`defaultResult`之后执行. */ finalResult?: ( /** * 业务数据或者原始数据. */ data: D, /** * 原始数据, 接口整个数据. */ rawData: unknown, /** * 原始响应, 包含响应头、响应状态等信息. */ resp: HTTP.RawResponse) => D; /** * 请求拦截器. */ requestInterceptors?: HTTP.RequestInterceptor[]; /** * 响应拦截器. */ responseInterceptors?: HTTP.DefaultResponseInterceptor[]; /** * 中间件列表. */ middlewares?: HTTP.Middleware[]; } export type { BaseRequestConfig, GlobalRequestConfig }; export default GlobalRequestConfig;