axios封装,aip接口统一管理

首先创建request.ts,在里面创建axios实例,并做请求响应拦截器的处理

import axios from "axios";
import { ElMessage } from 'element-plus'


//1. 创建新的axios实例,
const service = axios.create({
    // 超时时间 单位是ms,这里设置了3s的超时时间
    timeout: 3 * 1000,
  });
  
  // 2.请求拦截器
   service.interceptors.request.use(
     (config) => {
      //  发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加
        config.headers = {
            "Content-Type": "application/x-www-form-urlencoded", //配置请求头
          'x-token': localStorage.getItem('token') ? localStorage.getItem('token') : '',
        };
      
       return config;
     },
     (error) => {
       Promise.reject(error);
     }
   );
  
  // 3.响应拦截器
  service.interceptors.response.use(
    (response) => {
      //接收到响应数据并成功后的一些共有的处理,关闭loading等
      return response;
    },
    (error) => {
      /***** 接收到异常响应的处理开始 *****/
      if (error && error.response) {
        // 1.公共错误处理
        // 2.根据响应码具体处理
        console.log(error.response.status,'error.response.status');
        
        switch (error.response.status) {
          case 400:
            error.message = error.response.data.msg;
            break;
          case 401:
            error.message = "未授权,请重新登录";
            break;
          case 403:
            error.message = "拒绝访问";
            break;
          case 404:
            error.message = "请求错误,未找到该资源";
            break;
          case 405:
            error.message = "请求方法未允许";
            break;
          case 408:
            error.message = "请求超时";
            break;
          case 500:
            error.message = "服务器端出错";
            break;
          case 501:
            error.message = "网络未实现";
            break;
          case 502:
            error.message = "网络错误";
            break;
          case 503:
            error.message = "服务不可用";
            break;
          case 504:
            error.message = "网络超时";
            break;
          case 505:
            error.message = "http版本不支持该请求";
            break;
          default:
            error.message = `连接错误${error.response.status}`;
        }
      } else {
        // 超时处理
        if (JSON.stringify(error).includes("timeout")) {
          ElMessage.closeAll()
          ElMessage({
              message: '服务器响应超时,请刷新当前页',
              type: 'error',
          })
        }
        error.message = "连接服务器失败";
      }
      ElMessage.closeAll()
      ElMessage({
          message: error.message,
          type: 'error',
      })
      /***** 处理结束 *****/
      //如果不需要错误处理,以上的处理过程都可省略
      return Promise.resolve(error.response);
    }
  );
  //4.导入文件
  export default service;

接着创建http.ts,对常用四种请求方式进行统一封装

import request from "./request";

const http = {
    /**
     * methods: 请求
     * @param url 请求地址
     * @param params 请求参数
     */
    get(url: string, params?: object) {
        const config: any = {
            method: "get",
            url: url,
        };
        if (params) config.params = params;
        return request(config);
    },
    post(url: string, params?: object) {
        const config: any = {
            method: "post",
            url: url,
        };
        if (params) config.data = params;
        return request(config);
    },
    put(url: string, params?: object) {
        const config: any = {
            method: "put",
            url: url,
        };
        if (params) config.data = params;
        return request(config);
    },
    delete(url: string, params?: object) {
        const config: any = {
            method: "delete",
            url: url,
        };
        if (params) config.params = params;
        return request(config);
    },
};
//导出
export default http;

最后创建api.js 在次进行接口的封装

import http from "../utils/http";

const baseUrl = () => {
    return process.env.NODE_ENV === "development"
        ? (window as any).g.development.BASEURL + "/api"
        : (window as any).g.production.BASEURL;
};

/**
 * @description:  预案
 * */

// 预案列表
export const getPlanList = () => {
    return http.get(`${baseUrl()}/api/plan/list`);
};

// 新增预案
export const addPlan = (params: object) => {
    return http.post(`${baseUrl()}/api/plan`, params);
};

// 预案更新
export const updatePlan = (id: number, params: object) => {
    return http.put(`${baseUrl()}/api/plan/${id}`, params);
};

// 预案删除
export const deletePlan = (id: number) => {
    return http.delete(`${baseUrl()}/api/plan/${id}`);
};

就这样,一个简单的接口封装就完成了,可以大大提高我们工作中的开发效率

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Axios是一个基于Promise的HTTP客户端工具,用于发送异步请求到服务器并处理响应数据。针对不同的接口,我们通常需要编写不同的请求代码,这样会造成代码的冗余、可维护性变差等问题。因此,将Axios进行封装,实现统一处理接口是十分必要的。 首先,我们需要定义一个统一处理接口工具类,该类包含了请求的各个参数,如headers、params、data、url等,同时还需要定义一些公共操作,比如设置请求头、设置响应数据格式、设置过期时间等。 然后,我们可以根据实际需求,提供一个简单易用的API接口,以供使用。在使用API接口时,只需要传入参数并调用即可,封装的工具类会将参数整合后发出请求,并对响应数据进行处理,返回符合要求的数据。 另外,在封装过程中,我们还需要考虑一些异常情况的处理,比如请求超时、网络出错、服务器异常等,这些异常情况都需要有相应的处理方式,例如重试、报警、记录日志等。 通过以上的封装,我们可以使得接口的调用变得更加简单、规范,同时还可以大幅提高代码的复用性、可维护性和可扩展性。 ### 回答2: 随着前端技术的不断发展,前后端分离的开发模式已经成为了越来越多的企业和开发者的选择。在这种模式下,前端需要向后端请求数据,完成页面渲染和交互操作。而axios作为一款广泛应用的http请求工具,在前端开发中也有着重要的地位。 在实际开发中,通常需要对axios进行封装,以便于统一处理接口,提高代码复用性和维护性。而在封装过程中,主要需要考虑以下几个方面: 1. 统一接口格式以便于处理 不同的后端接口可能有着不同的返回格式,为了方便处理数据,需要将不同接口的返回格式进行统一。通常可以定义一个统一的数据格式,如 { code: 200, message: 'success', data: {}, } 以此来包裹不同接口的数据返回。 2. 处理请求和响应拦截 在封装过程中,需要对请求和响应进行拦截,以便于处理请求头、请求参数、响应状态码等信息。请求拦截可以用于设置全局请求头、请求参数,响应拦截可以用于处理错误信息、统一处理响应数据等操作。 3. 统一处理错误信息 当后端返回错误信息时,需要对错误信息进行统一处理,如提示用户、记录日志等操作。因此,需要在封装过程中考虑到错误处理的逻辑,以便于在出现错误时进行统一处理。 4. 优化请求性能 在实际开发中,为了保证应用的性能和用户体验,需要优化http请求,如缓存、懒加载等操作。 以上就是对axios封装统一处理接口的一些思考和总结。通过封装,可以提高代码的复用性和维护性,优化开发效率和用户体验,是一项非常重要的前端开发技能。 ### 回答3: 随着前端技术的不断发展,前端页面需求也越来越复杂,前后端分离的思想被广泛应用,而axios作为一款常用的HTTP客户端库,成为了前端开发中不可或缺的工具之一。在日常开发中,针对不同的接口请求,我们需要编写很多的axios请求代码,这样会造成代码量较大、维护困难等问题。因此,开发者一般会采用一定的封装方法,如axios封装统一处理接口,来解决这样的问题。 axios封装统一处理接口的具体实现方法是,将axios中的请求、响应拦截器进行封装处理,实现请求前的处理、响应后的处理以及异常处理等功能。我们可以将某些相同的参数如headers、timeout或baseURL等配置在一个统一的配置文件中,以提高代码的可复用性和可维护性。我们也可以自定义方法如get、post和put等,根据业务需求来定义统一处理接口。 使用axios封装统一处理接口的好处有很多。首先,可以将所有的请求和响应进行统一处理,这样可以减少重复代码,提高代码的可读性和复用性。同时,可以在拦截器中统一处理错误信息,实现异常处理,提高代码的容错性和健壮性。其次,可以更好的管理接口的访问权限和处理方式,保证代码的安全性和稳定性。最后,可以更方便地进行接口管理和调用,提高了开发效率和团队协作的效果。 总之,使用axios封装统一处理接口,可以提高代码的可维护性、重用性和健壮性,同时也方便了接口管理和调用,为项目开发提供了更好的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigHead-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值