使用 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-urlencoded 或 multipart/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);
});
相关推荐
JavaGuide14 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel14 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘16 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马16 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut16 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12316 小时前
实现完整 Tool Dispatcher
开发语言·前端
IT_陈寒17 小时前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端
Mr_Mao17 小时前
告别选型困难!集 VueUse、ahooks、Mantine 于一身:286 个 Hook 的 ReaUse 来了
前端·javascript·react.js
泡海椒18 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
默_笙18 小时前
🚙 一条腿走路会摔:ES 关键词检索、混合召回与 ReRank 裁判
前端·javascript