配置:
export const requestConfig: RequestConfig = {
// 错误处理: umi@3 的错误处理方案。
errorConfig: {
// 错误抛出
// 当后端返回字段success=false时触发这个方法并抛出一个自定义的业务异常(BizError);
errorThrower: (res) => {
const {success, data, status, message} =
res as unknown as ResponseStructure;
if (!success) {
const error: any = new Error(message);
error.name = 'BizError';
error.info = {status, message, data};
throw error; // 抛出自定义错误
}
},
// 错误接收及处理
errorHandler: (error: any, opts: any) => {
if (opts?.skipErrorHandler) throw error;
dealError(error);
},
},
// 请求拦截器,拦截请求配置,进行个性化处理。
requestInterceptors: [
(config: RequestOptions) => {
// 请求头增加token
const tokenHeader = {
'toro-group': localStorage.getItem("toro_group_token"),
}
return {...config, headers: tokenHeader};
},
],
// 响应拦截器
responseInterceptors: [
(response) => {
/**
* response结构
* {
* data: any, // 后端返回的数据
* status: number, // http返回的状态码
* 。。。。。
* }
*/
// 响应data域增加success字段
// @ts-ignore
// 拦截响应数据,进行个性化处理
const {data} = response as unknown as ResponseStructure;
// 兼容后端返回的状态status:(如果没有返回success字段,增加返回字段success),success为false则触发errorThrower
data.success = (data.status === 200 || data.status === 'ok');
return response;
},
],
};
缺陷记录
1、描述:配置了全局异常,但是页面不仅走了全局异常处理,还在页面上打印了一个Unhandled Rejection
解决:由于ModalForm 组件设置了submitTimeout 属性(提交数据时,禁用取消按钮的超时时间(毫秒))当程序异常后,这个方法没有处理异常。