haoxiaolan 2023-10-12 11:16 采纳率: 34.7%
浏览 23
已结题

前端umi-request中请求errorHandler

ant design pro 请求的异常处理

request,ts


/**
 * request 网络请求工具
 * 更详细的 api 文档: https://github.com/umijs/umi-request
 */
import {extend} from 'umi-request';
import {message, notification} from "antd";

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

/**
 * 异常处理程序
 */
const errorHandler = (error: { response: Response }): Response => {
  const {response} = error;
  if (response && response.status) {
    const errorText = codeMessage[response.status] || response.statusText;
    const {status, url} = response;
    console.log(status)
    // 处理参数问题
    let noParamUrl = url;
    if (url.indexOf('?') !== -1) {
      noParamUrl = url.substring(0, url.indexOf('?'));
    }
    if (status === 401) {
      notification.warn({
        message: '请重新登陆!',
      });
    } else {
      notification.error({
        message: `请求错误 [${status}]: ${noParamUrl}`,
        description: errorText,
      });
    }

  } else if (!response) {
    console.log(response)
    notification.error({
      description: '您的网络发生异常,无法连接服务器',
      message: '网络异常',
    });
  }
  return response;
};


/**
 * 配置request请求时的默认参数
 */
const request = extend({
  errorHandler,
  timeout: 10000
});

/**
 * 所以请求拦截器
 */
request.interceptors.request.use((url, options): any => {
  return {
  };
});

/**
 * 所有响应拦截器
 */
request.interceptors.response.use(async (response, options): Promise<any> => {
  const res = await response.clone().json()
  if (res.code== 0) {
    message.error(res.msg)
  }
    return res.data;
});

export default request;

img


返回404 状态 单数 异常处没有生效。这怎么解决?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-12 14:27
    关注

    【以下回答由 GPT 生成】

    可以在errorHandler函数中添加自定义的逻辑来处理特定的错误状态码。例如,可以根据状态码显示不同的错误提示信息,或者进行特定的操作。

    以下是一个示例代码,展示如何在errorHandler函数中处理特定的错误状态码:

    /**
     * 异常处理程序
     */
    const errorHandler = (error: { response: Response }): Response => {
      const {response} = error;
      if (response && response.status) {
        const errorText = codeMessage[response.status] || response.statusText;
        const {status, url} = response;
        console.log(status);
        // 处理参数问题
        let noParamUrl = url;
        if (url.indexOf('?') !== -1) {
          noParamUrl = url.substring(0, url.indexOf('?'));
        }
        if (status === 401) {
          // 如果是401错误,提示重新登录
          notification.warn({
            message: '请重新登陆!',
          });
        } else if (status === 404) {
          // 如果是404错误,显示自定义的错误提示信息
          notification.error({
            message: '页面不存在',
            description: '您访问的页面不存在,请检查URL是否正确。',
          });
        } else {
          // 其他错误状态码,显示默认的错误提示信息
          notification.error({
            message: `请求错误 [${status}]`,
            description: errorText,
          });
        }
      }
    
      // 返回原始的响应
      return response;
    }
    

    在上述代码中,我添加了一段逻辑来处理404错误状态码。当服务器返回404时,会显示自定义的错误提示信息。如果遇到其他错误状态码,将显示默认的错误提示信息。

    你可以根据需要添加自定义的逻辑来处理其他特定的错误状态码。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月20日
  • 修改了问题 10月12日
  • 修改了问题 10月12日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器