优化你的 JavaScript 项目:Axios request 封装指南

在开发中,为了提高效率,通常对 Axios 进行封装,简化了请求的发送和对响应的处理。同时,统一错误处理机制有助于维护代码的清晰和一致性。本文介绍了一些高效封装 Axios 请求的方法。

alt

封装理念

通过创建一个请求函数,我们可以隐藏 Axios 的直接调用,将请求的配置作为参数传入。成功的请求会解析(resolve)返回数据,失败的请求则拒绝(reject)并返回错误信息。promise 的使用使得处理这些行为变得异常便利。

封装基础请求如下所示:

1function request(options) { 2 return new Promise((resolve, reject) => { 3 axios(options) 4 .then(response => { 5 resolve(response.data); 6 }) 7 .catch(error => { 8 reject(error); 9 }); 10 }); 11}

进一步,封装常用的 get 和 post 请求方法:

1function get(endpoint, query) { 2 return request({ 3 method: 'get', 4 url: endpoint, 5 params: query 6 }); 7} 8 9function post(endpoint, payload) { 10 return request({ 11 method: 'post', 12 url: endpoint, 13 data: payload 14 }); 15}

现在,在代码中直接利用 get 或 post 函数即可发起请求。

精简重复代码

通用设置,如 baseURL,应当被提取,避免每次请求重复声明。

1function request(options) { 2 let axiosInstance = axios.create({ 3 baseURL: 'https://your-api-domain.com/api/', 4 timeout: 10000 5 }); 6 7 // 应用实例配置 8 options = Object.assign({}, options, { axiosInstance }); 9 10 return new Promise((resolve, reject) => { 11 axiosInstance(options) 12 .then(response => { 13 resolve(response.data); 14 }) 15 .catch(error => { 16 reject(error); 17 }); 18 }); 19}

如此一来,简化了通用配置的过程。

拦截器的应用

拦截器是 Axios 的重要特性,使得对请求和响应的修改变得简洁。

1// 添加请求拦截器 2axiosInstance.interceptors.request.use( 3 config => { 4 // 修改请求之前的配置 5 return config; 6 }, 7 error => { 8 // 请求错误的处理逻辑 9 return Promise.reject(error); 10 } 11); 12 13// 添加响应拦截器 14axiosInstance.interceptors.response.use( 15 response => { 16 // 统一处理响应数据 17 return response; 18 }, 19 error => { 20 // 统一处理响应错误 21 return Promise.reject(error); 22 } 23);

错误的统一管理

利用 .catch 捕捉整个请求流程中可能出现的异常,简化了错误处理逻辑。

1function request(options) { 2 // ... 3} 4 5request(options) 6 .then(data => { 7 // 处理请求成功的数据 8 }) 9 .catch(error => { 10 // 统一处理请求异常 11 });

请求的取消

在需要中断请求时, Axios 的取消令牌(cancel token)提供了便利。

1const CancelToken = axios.CancelToken; 2const source = CancelToken.source(); 3 4request({ 5 // 其他配置... 6 cancelToken: source.token 7}); 8 9// 如需取消请求 10source.cancel('Operation canceled by the user.');

使用示例

以下是一个调用实例,演示了封装函数的使用方法:

1import { get, post } from './request'; 2 3get('/user', { id: '12345' }) 4 .then(response => { 5 console.log(response); 6 }) 7 .catch(error => { 8 console.error(error); 9 }); 10 11post('/user', { name: 'Jane' }) 12 .then(response => { 13 console.log(response); 14 }) 15 .catch(error => { 16 console.error(error); 17 });

通过这些方法,你可以轻松实现请求的发起和结果的处理。

实用提示

  • 把 Axios 封装进一个可配置的 request 方法
  • 将基础配置如 baseURL 提取出来
  • 利用拦截器优化请求与响应的处理
  • 通过 .catch 异常处理简化错误处理
  • 支持请求的取消

结束语

对 Axios 进行恰当的封装能够大幅提升开发效率,减少重复代码,并且集中处理错误,以上提到的封装策略都是常见的实践,依据具体情况灵活调整。

知识扩展:

参考:

点赞
收藏

评论区

加载中...

相关推荐

前端的路由封装

在一个项目当中,我们常常需要调用很多接口,我们不可能每次调用接口都完整地写一遍调用,因此我们需要对其进行封装/axios.js///封装axiosimportaxiosfrom"axios";importqsfrom"qs";//初始化axios,设置默认的baseURLconsthttpaxios.create(baseUR

记录Vue项目实现axios请求头带上token

在vue项目中首先npm命令安装axios:npminstallaxiosSaxios的封装使用请求带上token,token通过登录获取存在vuex,为防止刷新丢失token使用持久化vuexpersistedstate插件保存数据npmiSvuexpersistedstateimportpersistedStat

React中利用axios来实现数据请求

axios是基于Promise来封装的,通常我们会用axios在数据请求这块作如下配置:一、拦截器!(https://oscimg.oschina.net/oscnet/211e5ccb358ad510f5399d98163fe5be900.png)有注释,不难理解,通常请求头参数不是写死的,应该是去浏览器中读的,例如,login之后

ActionContext和ServletActionContext区别以及action访问servlet API的三种方法

1\.ActionContext在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServletHttp的请求(HttpServletRequest),响应(HttpServletResponse)操作.我们需要

Request学习笔记

Request请求对象:平时通过浏览器浏览网页的时候,浏览器会向服务器发送一些请求,而服务器则会把这些请求封装在HttpServletRequest中,我们可以通过这个对象获得一些用户的请求信息。Request.getParameter()是获取请求信息的重要API,或者Request.getParameterNames()。更多用法学习,具体可以查

Java设计模式之命令模式

介绍命令模式是一种行为型设计模式。在命令模式中,所有的请求都会被包装成为一个对象。参考了一下其他关于命令模式的文章,其中有谈到说是可以用不同的请求对客户进行参数化。对这句话的理解是,因为将请求封装成为对象,所以客户的所有操作,其实就是多个命令类的对象而已,即参数化了。命令模式的最大的特点就是将请求的调用者与请求的最终执行者进行了解