zzyxyz_server/static/fetch-wrapper使用文档.md

4.1 KiB
Raw Blame History

FetchWrapper 类使用文档

概述:

FetchWrapper 是一个基于 fetch API 的封装类用于简化网络请求操作并提供默认选项、Content-Type 自动映射、错误处理和重试机制等功能。

构造函数

new FetchWrapper(baseURL, contentTypeMappings = {}, defaultOptions = {}, onError = console.error)
  • baseURL:基础 URL 字符串,所有相对路径的请求都会基于此 URL 进行拼接。
  • contentTypeMappings:对象,键为文件扩展名或通配符模式,值为对应的 Content-Type当请求 URL 匹配时自动设置 Content-Type 头部。
  • defaultOptions:对象,定义了发起请求时的默认选项,例如:
    {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json'
      },
      // 其他默认配置项...
    }
    
  • onError:错误回调函数,当发生网络请求错误时触发,默认为 console.error

主要方法

formatResponse(response, data)

formatResponse(response, data)
  • 格式化响应对象和数据,返回一个统一格式的对象。

fetch(url, options = {})

async fetch(url, options = {})
  • 发起 HTTP 请求,参数说明:
    • url:请求 URL。
    • options:覆盖默认选项的对象,可自定义请求方法、头部、请求体等信息。

getParseResponseHandler(contentType)

getParseResponseHandler(contentType)
  • 根据响应内容类型Content-Type获取相应的解析器函数。

fetchWithRetry(url, options = {}, maxRetries = 3, retryDelayBaseMs = 1000)

async fetchWithRetry(url, options = {}, maxRetries = 3, retryDelayBaseMs = 1000)
  • 发起带有重试机制的 HTTP 请求,在请求失败时会按照指数退避策略进行重试。
    • maxRetries最大重试次数默认为3次。
    • retryDelayBaseMs首次重试延迟时间的基础单位默认为1000毫秒。

post(url, body, options = {})

get(url, options = {})

put(url, body, options = {})

patch(url, body, options = {})

delete(url, options = {})

这些是针对不同HTTP方法的便捷调用方法。

示例使用:

const wrapper = new FetchWrapper('https://api.example.com', {
    '.json': 'application/json',
}, {
    credentials: 'include',
});

async function fetchData() {
    try {
        const response = await wrapper.get('/data.json');
        console.log(response.data);
    } catch (error) {
        wrapper.onError(error);
    }
}

//使用带重试机制的 POST 请求
async function postDataWithRetry() {
    const body = { key: 'value' };
    const options = { headers: { 'X-Custom-Header': 'value' } };

    try {
        const response = await wrapper.fetchWithRetry('/post-data', { body }, 5, 2000);
        console.log(response.data);
    } catch (error) {
        wrapper.onError(error);
    }
}

以上JavaScript代码已用Markdown代码块包裹可以直接复制并粘贴到您的项目中。通过创建一个 FetchWrapper 实例,您可以利用其便捷的方法来发起网络请求,并根据需要灵活定制请求选项以及实现重试功能。

当您在fetch-wrapper.js文件中使用export default class FetchWrapper {...}导出FetchWrapper类时您可以在其他JavaScript模块中这样导入

// 导入 FetchWrapper 类
import FetchWrapper from './fetch-wrapper';

// 创建一个实例
const wrapper = new FetchWrapper('https://api.example.com', {}, { credentials: 'include' });

// 使用这个实例发起请求
async function fetchData() {
    try {
        const response = await wrapper.get('/data.json');
        console.log(response.data);
    } catch (error) {
        wrapper.onError(error);
    }
}

fetchData();

这里,./fetch-wrapper是相对路径表示FetchWrapper类所在的模块位置。根据实际项目结构您需要调整这个路径以便正确指向fetch-wrapper.js文件。

formatResponse(response, data) {
    return {
        status: response.status,
        message: response.statusText,
        data,
    };
}