|
|
@@ -0,0 +1,114 @@ |
|
|
|
import { history, RequestConfig } from 'umi'; |
|
|
|
import { ResponseError } from 'umi-request'; |
|
|
|
import { notification } from 'antd'; |
|
|
|
import { firstCharToLowerCase, handleRequest } from './utils/tool'; |
|
|
|
import { isObject } from 'lodash'; |
|
|
|
import { logout, queryCurrent } from './services/user'; |
|
|
|
|
|
|
|
const codeMessage = { |
|
|
|
200: '服务器成功返回请求的数据。', |
|
|
|
201: '新建或修改数据成功。', |
|
|
|
202: '一个请求已经进入后台排队(异步任务)。', |
|
|
|
204: '删除数据成功。', |
|
|
|
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', |
|
|
|
401: '用户没有权限(令牌、用户名、密码错误)。', |
|
|
|
403: '用户得到授权,但是访问是被禁止的。', |
|
|
|
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', |
|
|
|
405: '请求方法不被允许。', |
|
|
|
406: '请求的格式不可得。', |
|
|
|
410: '请求的资源被永久删除,且不会再得到的。', |
|
|
|
422: '当创建一个对象时,发生一个验证错误。', |
|
|
|
500: '服务器发生错误,请检查服务器。', |
|
|
|
502: '网关错误。', |
|
|
|
503: '服务不可用,服务器暂时过载或维护。', |
|
|
|
504: '网关超时。', |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* 异常处理程序 |
|
|
|
*/ |
|
|
|
const errorHandler = (error: ResponseError) => { |
|
|
|
const { response, data } = error; |
|
|
|
if (response && response.status) { |
|
|
|
const errorText = codeMessage[response.status] || response.statusText; |
|
|
|
const { status, url } = response; |
|
|
|
|
|
|
|
notification.error({ |
|
|
|
message: `请求错误 ${status}: ${url}`, |
|
|
|
description: errorText, |
|
|
|
}); |
|
|
|
return { |
|
|
|
code: response.status, |
|
|
|
message: errorText, |
|
|
|
} |
|
|
|
} |
|
|
|
if (data && typeof data === 'object' && ('error' in data)) return data; |
|
|
|
// todo 报错都不走error, 改为构建成data; |
|
|
|
if (!response) { |
|
|
|
notification.error({ |
|
|
|
description: '您的网络发生异常,无法连接服务器', |
|
|
|
message: '网络异常', |
|
|
|
}); |
|
|
|
} |
|
|
|
// throw error; |
|
|
|
return { |
|
|
|
code: 'err', |
|
|
|
message: '网络异常', |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
export const request: RequestConfig = { |
|
|
|
errorConfig: { |
|
|
|
adaptor: (resData, ctx) => { |
|
|
|
const { Code, Data, Msg } = resData; |
|
|
|
if ('Code' in resData) { resData.code = Code; delete resData.Code; } |
|
|
|
if ('Data' in resData) { |
|
|
|
resData.data = Data; |
|
|
|
if (isObject(Data)) { |
|
|
|
resData.data = firstCharToLowerCase(Data); |
|
|
|
} |
|
|
|
delete resData.Data; |
|
|
|
} |
|
|
|
if ('Msg' in resData) { resData.message = Msg; delete resData.Msg; }; |
|
|
|
if (!('success' in resData)) { // http请求是否成功 |
|
|
|
// console.log('adpator log:', resData); |
|
|
|
resData.success = true; |
|
|
|
} |
|
|
|
if ('code' in resData) { // 业务请求是否成功 |
|
|
|
resData.requestIsSuccess = resData.code === null || resData.code === 0 || resData.code === '0'; |
|
|
|
} |
|
|
|
return resData; |
|
|
|
}, |
|
|
|
}, |
|
|
|
credentials: "same-origin", |
|
|
|
// errorHandler, |
|
|
|
errorHandler, |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
export async function getInitialState() { |
|
|
|
async function fetchUserInfo() { |
|
|
|
const res = await queryCurrent(); |
|
|
|
handleRequest(res) |
|
|
|
.error(() => logout()) |
|
|
|
.httpError(() => logout()); |
|
|
|
|
|
|
|
return res.data; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果是登录页面,不执行 |
|
|
|
if (history.location.pathname !== '/login') { |
|
|
|
const currentUser = await fetchUserInfo(); |
|
|
|
if(!currentUser) { |
|
|
|
logout(); |
|
|
|
} |
|
|
|
return { |
|
|
|
fetchUserInfo, |
|
|
|
currentUser, |
|
|
|
}; |
|
|
|
} |
|
|
|
return { |
|
|
|
fetchUserInfo, |
|
|
|
}; |
|
|
|
} |