ant-design-pro 中怎么统一处理接口返回的会话失效

model里有许多接口都是要登陆后才能调用的,code返回200是正常,
返回20020时是会话失效了,这时我想跳重新转到登录页面,我是这样处理的

    *fetchShopSaleList({ payload }, { call, put }) {
      let res = yield call(qryShopSaleGroup, payload);
      if(res.code === 200) {
        yield put({
          type: 'save',
          payload: {
            shopCardList: res.data,
          },
        });
      } else if (res.code === 20020) {
        yield put(routerRedux.push('/user/cloudlogin'));
      }
    },

    *fetchShopSaleInfo({ payload }, { call, put }) {
      let res = yield call(qryShopSaleGroup, payload);
      if(res.code === 200) {
        yield put({
          type: 'save',
          payload: {
            shopSaleInfoList: res.data,
          },
        });
      } else if (res.code === 20020) {
        yield put(routerRedux.push('/user/cloudlogin'));
      }
    },

在每个方法里判断下返回的code是否等于20020,如果等于就跳转到登录页面。
我这样每个接口下都要写多这么一个判断,感觉不怎么好。

请问有没什么办法能统一处理?

阅读 7.9k
2 个回答

antd-pro中,src/utils/request.js文件里 request方法中可以统一做处理,不用在model添加额外代码

import { extend } from 'umi-request';

...

/**
 * 配置request请求时的默认参数
 */
const request = extend({
  errorHandler, // 默认错误处理
  credentials: 'include', // 默认请求是否带上cookie
});

/**
* 对于状态码实际是 200 的错误
*/
request.interceptors.response.use(async (response) => {
  const data = await response.clone().json();
  if(data && data.NOT_LOGIN) {
    location.href = '登录url';
  }
  return response;
})

export default request;

具体文档可查看 umi-request

antd-pro中,在src/utils/request.js文件里面的request方法中可以统一做处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题