1. const codeMessage = {
    2. 200: '服务器成功返回请求的数据。',
    3. 201: '新建或修改数据成功。',
    4. 202: '一个请求已经进入后台排队(异步任务)。',
    5. 204: '删除数据成功。',
    6. 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
    7. 401: '用户没有权限(令牌、用户名、密码错误)。',
    8. 403: '用户得到授权,但是访问是被禁止的。',
    9. 404: '请求了不存在的资源,如果反复出现此现象,请联系软件服务商。',
    10. 405: '请求方法不被允许。',
    11. 406: '请求的格式不可得。',
    12. 410: '请求的资源被永久删除,且不会再得到的。',
    13. 422: '当创建一个对象时,发生一个验证错误。',
    14. 500: '服务器遇到了一些麻烦,请稍后尝试或联系软件服务商。',
    15. 502: '中间服务器和远端服务器之间遇到了一些麻烦,请稍后尝试或联系软件服务商。',
    16. 503: '服务器临时有点儿忙,请稍后尝试或联系软件服务商。',
    17. 504: '中间服务器和没有联系到远端服务器,请稍后尝试或联系软件服务商。',
    18. };
    19. const appExceptionMessage = {
    20. 0: '未知的错误。',
    21. 1: '服务器一直没有反应,可能是比较忙,请等一会儿再试一下。',
    22. 2: '哎呀,没有找到你要处理的数据,刷新一下页面再试试看吧。',
    23. };
    24. function setHeaders(url: string, options:RequestOptionsInit) {
    25. const { headers={}, ...rest } = options;
    26. const jwtToken = loadToken();
    27. if (jwtToken) {
    28. headers['Token'] = jwtToken;
    29. };
    30. return {
    31. url,
    32. options: { ...rest, headers },
    33. }
    34. }
    35. /**
    36. * 配置全局的请求参数
    37. */
    38. export const request: RequestConfig = {
    39. //请求拦截器
    40. requestInterceptors: [setHeaders],
    41. //异常处理程序
    42. errorHandler: (error: ResponseError) => {
    43. const { response } = error;
    44. if (response && response.status) {
    45. const { status, statusText, url } = response;
    46. const requestErrorMessage = '请求错误';
    47. //const errorMessage = `${requestErrorMessage} ${status}: ${url}`;
    48. const errorMessage = `${requestErrorMessage} ${status}: ${isDev? url: ''}`;
    49. const errorDescription = codeMessage[status] || statusText;
    50. if(status != 401) {
    51. notification.error({
    52. message: errorMessage,
    53. description: errorDescription,
    54. });
    55. }
    56. }
    57. if (!response) {
    58. let option = {
    59. description : '您的网络发生异常,无法连接服务器',
    60. message : '网络异常',
    61. }
    62. //处于开发状态的时候,将error的内容解析后输出在控制台上
    63. if(isDev)
    64. console.log('error', JSON.stringify(error,null,2));
    65. switch(error.name) {
    66. case 'RequestError':
    67. //请求的时候就发生了错误,目前只针对超时进行单独的处理
    68. if(error.type === "Timeout") {
    69. option.description = appExceptionMessage[1];
    70. option.message = '系统忙';
    71. }
    72. break;
    73. case 'BizError':
    74. //error.name是'BizError'意味着错误是由于返回的数据里面success为false而被抛出了异常
    75. //这是umi-request的定义的机制
    76. const {errorCode = 0, errorMessage = undefined} = error.data;
    77. option.description = (errorMessage != undefined)? errorMessage : (appExceptionMessage[errorCode] || appExceptionMessage[0]);
    78. option.message = '操作失败';
    79. break;
    80. }
    81. notification.error(option)
    82. }
    83. throw error;
    84. },
    85. }