有没有大佬分享一下 fetch 的 ts 封装?

有没有大佬分享一下 fetch 的 ts 封装?

阅读 2k
1 个回答
export default async(url = '', data = {}, type = 'GET') => {
    const baseUrl = "https://api.it120.cc/small4" // 基础路径
    type = type.toUpperCase(); // 请求方式小写转换成大写
    url = baseUrl + url; // 请求地址的拼接
 
    if (type == 'GET') {
        let dataStr = ''; //数据拼接字符串
        Object.keys(data).forEach(key => {
            dataStr += key + '=' + data[key] + '&';
        })
        if (dataStr !== '') {
            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
            url = url + '?' + dataStr;
        }
    }
    let requestConfig = {
        credentials: 'same-origin',
        method: type,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        mode: "cors", // 用来决定是否允许跨域请求  值有 三个 same-origin,no-cors(默认)以及 cores;
        cache: "force-cache" // 是否缓存请求资源 可选值有 default 、 no-store 、 reload 、 no-cache 、 force-cache 或者 only-if-cached 。
    }
 
    if (type == 'POST') {
        Object.defineProperty(requestConfig, 'body', {
            value: JSON.stringify(data)
        })
    }
    try {
        const response = await fetch(url, requestConfig);
        const responseJson = await response.json();
        return responseJson
    } catch (error) {
        throw new Error(error)
    }
}
import api from '../request.js';
 
下面是简写的形式
// getXXX 自定义的接口名字
export const getXXX = (params) => api(`/apigb/v1/component`, params)
 
export const postXXX = (params) => api.post(`/apigb/v1/component/update-info`, params,'post')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏