request.js 2.11 KB
Newer Older
陈帅's avatar
陈帅 committed
1 2 3 4 5
/**
 * request 网络请求工具
 * 更详细的api文档: https://bigfish.alipay.com/doc/api#request
 */
import { extend } from 'umi-request';
6
import { notification } from 'antd';
陈帅's avatar
陈帅 committed
7
import router from 'umi/router';
8

陈帅's avatar
陈帅 committed
9
const codeMessage = {
10
  200: '服务器成功返回请求的数据。',
陈帅's avatar
陈帅 committed
11
  201: '新建或修改数据成功。',
12
  202: '一个请求已经进入后台排队(异步任务)。',
陈帅's avatar
陈帅 committed
13
  204: '删除数据成功。',
14
  400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
陈帅's avatar
陈帅 committed
15 16
  401: '用户没有权限(令牌、用户名、密码错误)。',
  403: '用户得到授权,但是访问是被禁止的。',
17
  404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
陈帅's avatar
陈帅 committed
18 19 20
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除,且不会再得到的。',
  422: '当创建一个对象时,发生一个验证错误。',
21 22 23 24
  500: '服务器发生错误,请检查服务器。',
  502: '网关错误。',
  503: '服务不可用,服务器暂时过载或维护。',
  504: '网关超时。',
陈帅's avatar
陈帅 committed
25
};
26

陈帅's avatar
陈帅 committed
27 28 29 30 31
/**
 * 异常处理程序
 */
const errorHandler = error => {
  const { response = {} } = error;
陈帅's avatar
陈帅 committed
32
  const errortext = codeMessage[response.status] || response.statusText;
陈帅's avatar
陈帅 committed
33 34
  const { status, url } = response;

afc163's avatar
afc163 committed
35
  notification.error({
陈帅's avatar
陈帅 committed
36
    message: `请求错误 ${status}: ${url}`,
陈帅's avatar
陈帅 committed
37
    description: errortext,
afc163's avatar
afc163 committed
38
  });
陈帅's avatar
陈帅 committed
39

陈帅's avatar
陈帅 committed
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
  if (status === 401) {
    notification.error({
      message: '未登录或登录已过期,请重新登录。',
    });
    // @HACK
    /* eslint-disable no-underscore-dangle */
    window.g_app._store.dispatch({
      type: 'login/logout',
    });
    return;
  }
  // environment should not be used
  if (status === 403) {
    router.push('/exception/403');
    return;
  }
  if (status <= 504 && status >= 500) {
    router.push('/exception/500');
    return;
  }
  if (status >= 404 && status < 422) {
    router.push('/exception/404');
陈帅's avatar
陈帅 committed
62 63
  }
};
64 65

/**
陈帅's avatar
陈帅 committed
66
 * 配置request请求时的默认参数
67
 */
陈帅's avatar
陈帅 committed
68 69 70 71
const request = extend({
  errorHandler, // 默认错误处理
  credentials: 'include', // 默认请求是否带上cookie
});
陈帅's avatar
陈帅 committed
72

陈帅's avatar
陈帅 committed
73
export default request;