使用 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);
});
相关推荐
Mike_jia5 分钟前
Keep深度解析:开源AIOps告警中枢的实践革命
前端
Mintopia10 分钟前
计算机图形学进阶探索与实践
前端·javascript·计算机图形学
代码小学僧12 分钟前
团队协作必备!pnpm 版本管理与 corepack 使用指南
前端·node.js·团队管理
一天睡25小时12 分钟前
前端工程化&&Webpack 和 Vite 的区别
前端·前端框架
gxn_mmf12 分钟前
页面需要重加载才能显示的问题修改
前端·bug
北京_宏哥14 分钟前
🔥Jmeter(二十五) - 从入门到精通 - JMeter函数 - 下篇(详解教程)
前端·jmeter·面试
天生我材必有用_吴用15 分钟前
鸿蒙开发入门到进阶:从布局基础到组件实战
前端·harmonyos·arkts
zhangxiao16 分钟前
自定义指令 - 去除所有空格和换行
前端