最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 项目中Axios二次封装

    正文概述 掘金(丰子楷)   2021-06-01   570

    1.为什么做封装?

    • 方便代码整体调用、对请求做公共处理、个性化定制

    2.别人已经封装了很多,为什么不直接修改使用?

    • 封装思路不适合自身项目
    • 封装后调用不方便

    3.个人封装demo

    代码结构【基于vue】

    项目中Axios二次封装

    基本思路

    1. 将所有的请求接口地址按照文件分模块存储,比如 request/module/user 用户信息相关模块【服务】

    项目中Axios二次封装

    项目中Axios二次封装

    2.封装方法、类。给所有请求绑定常用的请求方法,和对请求url上的路径参数做处理

    generateServer.js

    import server from "../util/axiosConfig";
    // 修改axios基本配置,请求配置
    function request({
      url,
      method = "get",
      queryParm = {},
      body = {},
      pathParm = null,
      config = {},
    }) {
      const configAxios = {
        method,
        ...config,
        url: dealRequestUrl(url, pathParm),
      };
      switch (method) {
        case "get":
          configAxios.params = queryParm;
          break;
    
        default:
          // 请求方法 'PUT', 'POST', 和 'PATCH'
          configAxios.data = body;
          break;
      }
      console.log('configAxios', configAxios)
      return server(configAxios);
    }
    
    function dealRequestUrl(url, pathParm) {
      if (!pathParm) return url;
      let dealurl = url;
      Object.keys(pathParm).forEach((ele) => {
        dealurl = dealurl.replace(`{${ele}}`, pathParm[ele]);
      });
      return dealurl;
    }
    class GenerateServer {
      constructor(url) {
        this.url = url;
      }
      getdata(parm) {
        console.log('parm', parm)
        return request({ ...parm, method: "get", url: this.url });
      }
      postdata(parm) {
        return request({ ...parm, method: "post", url: this.url });
      }
      deletedata(parm) {
        return request({ ...parm, method: "delete", url: this.url });
      }
    }
    export default GenerateServer;
    
    

    3.整体暴露出去

    项目中Axios二次封装

    使用

        import { userInfoServer } from "./request";
        .
        .
        .
    
        // 发送请求
        userInfoServer.getUserName
          .getdata({
            queryParm: {
              id: 223,
            },
          })
          .then((res) => {
            console.log("res", res);
          });
        // 发送请求
        userInfoServer.getUserName
          .postdata({
            body: {
              id: 223,
            },
          })
          .then((res) => {
            console.log("res", res);
          });
        // 发送get请求,请求路径带参数
        userInfoServer.getUserList
          .getdata({
            queryParm: {
              id: 223,
            },
            pathParm: {
              id: 567,
            },
          })
          .then((res) => {
            console.log("res", res);
          });
    

    总结:上述的封装,主要是对请求拆分比较细致,便于维护。开发时也比较方便。对于新接口需求,只需要在对应模块增加URl配置和响应的生成器配置。便可以在业务代码里面处理请求。对于路径参数和请求体参数做了封装,使用时不需要关心相应的配置。

    上述代码没有处理文件上传、get请求参数字符串等情况。但是在对应的axios里面增加配置即可。维护方便。

    代码git:git


    起源地下载网 » 项目中Axios二次封装

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元