Proxy + Fetch 实现类似于 axios 的基础 API

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本项目通过 Proxy 和 Fetch 技术实现了一个类似 axios 的基础 API,支持请求拦截、响应处理等功能,简化了前端网络请求的开发流程,提升了代码的可维护性和扩展性。

以下是使用ProxyFetch在前端JavaScript中实现一个类似于axios的基础API的示例代码:

// 创建一个类似于axios的基础API对象
const myAxios = {
   };

// 创建一个代理对象来拦截属性访问并返回一个函数,用于发送请求
myAxios.get = new Proxy(() => {
   }, {
   
    apply: async (target, thisArg, args) => {
   
        const [url, config] = args;
        const response = await fetch(url, {
   
          ...config,
            method: 'GET'
        });
        return response.json();
    }
});

myAxios.post = new Proxy(() => {
   }, {
   
    apply: async (target, thisArg, args) => {
   
        const [url, data, config] = args;
        const response = await fetch(url, {
   
          ...config,
            method: 'POST',
            body: JSON.stringify(data)
        });
        return response.json();
    }
});

// 示例用法
myAxios.get('https://example.com/api/data', {
   
    headers: {
   
        'Content-Type': 'application/json'
    }
}).then(data => {
   
    console.log('GET请求获取的数据:', data);
});

myAxios.post('https://example.com/api/submit', {
   
    name: 'John',
    age: 30
}, {
   
    headers: {
   
        'Content-Type': 'application/json'
    }
}).then(data => {
   
    console.log('POST请求获取的数据:', data);
});

在上述代码中:

  1. 首先定义了myAxios对象,它将作为类似于axios的基础API容器。

  2. 对于myAxios.getmyAxios.post,分别创建了一个Proxy对象来拦截函数调用操作(通过apply陷阱)。

  3. myAxios.getProxy对象中:

    • 当调用myAxios.get(url, config)时,会拦截这个调用操作。
    • 从传入的参数中获取urlconfig(配置信息,如headers等)。
    • 使用Fetch发送一个GET请求到指定的url,并将配置信息合并进去,确保请求方法为GET
    • 最后,将响应解析为JSON格式并返回。
  4. myAxios.postProxy对象中:

    • 当调用myAxios.post(url, data, config)时,会拦截这个调用操作。
    • 从传入的参数中获取urldata(要发送的数据)和config
    • 使用Fetch发送一个POST请求到指定的url,将数据转换为JSON字符串作为请求体,同时确保请求方法为POST
    • 最后,将响应解析为JSON格式并返回。
  5. 最后给出了示例用法,分别展示了如何使用myAxios.getmyAxios.post发送请求并处理响应数据。

需要注意的是,这只是一个非常基础的类似于axios的API实现,axios本身还有很多其他的功能,如请求拦截器、响应拦截器、错误处理、并发请求等。如果要实现一个更完整的类似axios的库,还需要进一步扩展和完善上述代码。

相关文章
|
3月前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
43 4
|
3月前
|
JavaScript 前端开发 API
什么是ES6的Proxy对象和Reactive API
【9月更文挑战第3天】什么是ES6的Proxy对象和Reactive API
30 9
|
4月前
|
JavaScript 安全 API
Vue 3 Composition API 与 Options API:全面比较两者的区别和优缺点
Vue 3 Composition API 与 Options API:全面比较两者的区别和优缺点
|
7月前
|
JSON 前端开发 JavaScript
Fetch API与Ajax请求
Fetch API是JavaScript的一种新方法,用于网络请求,提供简洁的Promise-based语法和更多功能,如处理头、取消请求及跨域支持,比Ajax更强大。尽管不完全替代Ajax,尤其在老浏览器或需要底层控制时,Fetch API仍是现代浏览器中获取资源的优选工具。例如,以下代码展示了如何使用Fetch API进行GET和POST请求。
|
7月前
|
JavaScript API
Composition Api 与 Options Api 有什么区别?
Composition Api 与 Options Api 有什么区别?
131 0
【Express】—get请求参数 restful API
【Express】—get请求参数 restful API
【Express】—get请求参数 restful API
|
JavaScript API
Componsition API与Options API的对比
Componsition API与Options API的对比
66 0
|
JSON 前端开发 JavaScript
浅谈Fetch API
浅谈Fetch API
141 1
|
JavaScript API
Componsition API与Options API属性写法
Composition API是Vue 3.0新增的API,主要是为了解决Options API在大型应用中难以维护的问题。与Options API相比,Composition API更加灵活,可以更好地组织逻辑代码,同时也提供了更好的类型推断和代码重用。
71 0
|
JavaScript API
vue3中Options Api与Composition Api的区别?
vue3中Options Api与Composition Api的区别?
172 0