File size: 3,411 Bytes
04aba1b 09502ac 88e5a61 cb33b9e f30b544 cb33b9e 6b8fc2c cb33b9e 6b8fc2c 362ec6c 88e5a61 6b8fc2c 362ec6c fad2ec7 cb33b9e 04aba1b 6b8fc2c 04aba1b 362ec6c 6b8fc2c 88e5a61 6b8fc2c 88e5a61 6b8fc2c 362ec6c cb33b9e af3ef26 04aba1b 6b8fc2c fad2ec7 b916b29 6b8fc2c 7ba250b 6b8fc2c cb33b9e 04aba1b 6b8fc2c 04aba1b 6b8fc2c e4e6a45 362ec6c 6b8fc2c 04aba1b f30b544 6b8fc2c 88e5a61 6b8fc2c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import { Authorization } from '@/constants/authorization';
import { ResponseType } from '@/interfaces/database/base';
import i18n from '@/locales/config';
import authorizationUtil, { getAuthorization } from '@/utils/authorizationUtil';
import { message, notification } from 'antd';
import { history } from 'umi';
import { RequestMethod, extend } from 'umi-request';
import { convertTheKeysOfTheObjectToSnake } from './commonUtil';
const ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.';
const RetcodeMessage = {
200: i18n.t('message.200'),
201: i18n.t('message.201'),
202: i18n.t('message.202'),
204: i18n.t('message.204'),
400: i18n.t('message.400'),
401: i18n.t('message.401'),
403: i18n.t('message.403'),
404: i18n.t('message.404'),
406: i18n.t('message.406'),
410: i18n.t('message.410'),
422: i18n.t('message.422'),
500: i18n.t('message.500'),
502: i18n.t('message.502'),
503: i18n.t('message.503'),
504: i18n.t('message.504'),
};
type ResultCode =
| 200
| 201
| 202
| 204
| 400
| 401
| 403
| 404
| 406
| 410
| 422
| 500
| 502
| 503
| 504;
const errorHandler = (error: {
response: Response;
message: string;
}): Response => {
const { response } = error;
if (error.message === ABORT_REQUEST_ERR_MESSAGE) {
console.log('user abort request');
} else {
if (response && response.status) {
const errorText =
RetcodeMessage[response.status as ResultCode] || response.statusText;
const { status, url } = response;
notification.error({
message: `${i18n.t('message.requestError')} ${status}: ${url}`,
description: errorText,
});
} else if (!response) {
notification.error({
description: i18n.t('message.networkAnomalyDescription'),
message: i18n.t('message.networkAnomaly'),
});
}
}
return response;
};
const request: RequestMethod = extend({
errorHandler,
timeout: 300000,
getResponse: true,
});
request.interceptors.request.use((url: string, options: any) => {
const data = convertTheKeysOfTheObjectToSnake(options.data);
const params = convertTheKeysOfTheObjectToSnake(options.params);
return {
url,
options: {
...options,
data,
params,
headers: {
...(options.skipToken
? undefined
: { [Authorization]: getAuthorization() }),
...options.headers,
},
interceptors: true,
},
};
});
request.interceptors.response.use(async (response: any, options) => {
if (options.responseType === 'blob') {
return response;
}
const data: ResponseType = await response.clone().json();
if (data.retcode === 401 || data.retcode === 401) {
notification.error({
message: data.retmsg,
description: data.retmsg,
duration: 3,
});
authorizationUtil.removeAll();
history.push('/login'); // Will not jump to the login page
} else if (data.retcode !== 0) {
if (data.retcode === 100) {
message.error(data.retmsg);
} else {
notification.error({
message: `${i18n.t('message.hint')} : ${data.retcode}`,
description: data.retmsg,
duration: 3,
});
}
return response;
} else {
return response;
}
});
export default request;
|