項目中Axios二次封裝實例Demo

1.為什麼做封裝?

方便代碼整體調用、對請求做公共處理、個性化定制

2.別人已經封裝瞭很多,為什麼不直接修改使用?

  • 封裝思路不適合自身項目
  • 封裝後調用不方便

3.個人封裝demo

代碼結構【基於vue】

基本思路

將所有的請求接口地址按照文件分模塊存儲,比如 request/module/user 用戶信息相關模塊【服務】

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.整體暴露出去

使用

    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裡面增加配置即可。維護方便。

到此這篇關於項目中Axios二次封裝的文章就介紹到這瞭,更多相關Axios二次封裝內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

代碼git:git