使用 axios 实现接口共享,分页请求,表单提交

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js。它可以执行多种复杂的请求操作。以下是一些使用 Axios 实现的常见请求场景的示例。

请求共享

请求共享通常指的是确保对于相同的请求,在一定时间内只发送一次,如果有多个地方同时发起相同的请求,后续的请求会等待第一个请求完成后共享结果。这通常可以通过创建一个请求缓存或者使用请求锁来实现。

javascript 复制代码
const axios = require('axios');
const requestCache = {};

function sharedRequest(url) {
  if (requestCache[url]) {
    return requestCache[url];
  }

  const promise = axios.get(url).then(response => {
    delete requestCache[url];
    return response;
  }).catch(error => {
    delete requestCache[url];
    throw error;
  });

  requestCache[url] = promise;
  return promise;
}

// 使用
sharedRequest('https://api.example.com/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

分页请求

分页请求通常用于处理大量数据,这里是一个简单的递归函数,用于处理分页逻辑:

javascript 复制代码
async function fetchPages(url, page = 1, results = []) {
  const response = await axios.get(url, { params: { page } });
  const data = response.data;
  results = [...results, ...data.items];

  if (data.nextPage) {
    return fetchPages(url, page + 1, results);
  } else {
    return results;
  }
}

// 使用
fetchPages('https://api.example.com/items')
  .then(allItems => {
    console.log('All items:', allItems);
  })
  .catch(error => {
    console.error(error);
  });

表单提交

表单数据通常以 application/x-www-form-urlencodedmultipart/form-data 格式发送。以下示例展示了如何提交表单数据:

javascript 复制代码
const axios = require('axios');
const qs = require('qs'); // 使用 qs 库来序列化数据

const formData = {
  username: 'example',
  password: 's3cret'
};

axios.post('https://api.example.com/login', qs.stringify(formData), {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error(error);
});
相关推荐
foundbug99917 分钟前
Modbus协议C语言实现(易于移植版本)
java·c语言·前端
Luna-player18 分钟前
在前端中list.map的用法
前端·数据结构·list
用户479492835691522 分钟前
面试官问 React Fiber,这一篇文章就够了
前端·javascript·react.js
LYFlied34 分钟前
【一句话概述】Webpack、Vite、Rollup 核心区别
前端·webpack·node.js·rollup·vite·打包·一句话概述
reddingtons1 小时前
PS 参考图像:线稿上色太慢?AI 3秒“喂”出精细厚涂
前端·人工智能·游戏·ui·aigc·游戏策划·游戏美术
一水鉴天1 小时前
整体设计 定稿 之23+ dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q199 之2) (codebuddy)
开发语言·前端·javascript
刘发财1 小时前
前端一行代码生成数千页PDF,dompdf.js新增分页功能
前端·typescript·开源
_请输入用户名1 小时前
Vue 3 源码项目结构详解
前端·vue.js
少卿1 小时前
Next.js 国际化实现方案详解
前端·next.js
掘金挖土1 小时前
手摸手快速搭建 Vue3 + ElementPlus 后台管理系统模板,使用 JavaScript
前端·javascript