fetch的一些封装

481 阅读1分钟

将URL中的参数名替换成对应的值

const getApi = (url, params) => {
  if (!params || typeof params !== "object") return url;
  const api = Object.keys(params)
    .reduce((accUrl, key) => {
      const keyReg = new RegExp(`:${key}\\??`);
      return accUrl.replace(keyReg, params[key]);
    }, url.trim())
    .replace(/\/:([\w]*)\??/g, "");
  return api;
};

请求中添加version和url

const getParams = ( url,param) => {
  if (typeof param !== "object") return param;
  return {
    version: CURRENT_VERSION.version,
    ...param,
  };
};

新增一些全通用方法

ApiFetch.get = (url, param, header) => {
  const params = getParams(url, param);
  let api = getApi(url, params);
  if (params && typeof params === "object") {
    const paramsArray = [];
    Object.keys(params).forEach(key =>
      paramsArray.push(`${key}=${params[key]}`)
    );
    if (api.search(/\?/) === -1) {
      api += `?${paramsArray.join("&")}`;
    } else {
      api += `&${paramsArray.join("&")}`;
    }
  }
  return doFetch(api, "GET", null, header);
};

ApiFetch.post = (url, param, header) => {
  const params = getParams(url, param);
  const api = getApi(url, params);
  const body = typeof params === "object" ? JSON.stringify(params) : params;
  return doFetch(api, "POST", body, header);
};

ApiFetch.upload = (url, param, header = {}) => {
  const params = getParams(url, param);
  const api = getApi(url, params);
  return doFetch(api, "POST", params, header);
};

ApiFetch.put = (url, param, header) => {
  const params = getParams(url, param);
  const api = getApi(url, params);
  const body = typeof params === "object" ? JSON.stringify(params) : params;
  return doFetch(api, "PUT", body, header);
};

ApiFetch.delete = (url, param, header) => {
  const params = getParams(url, param);
  const api = getApi(url, params);
  const body = typeof params === "object" ? JSON.stringify(params) : params;
  return doFetch(api, "DELETE", body, header);
};