使用 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);
});
相关推荐
David凉宸1 天前
Vue 3 项目的性能优化策略:从原理到实践
前端·vue.js·性能优化
小马_xiaoen1 天前
Proxy 与 Reflect 从入门到实战:ES6 元编程核心特性详解
前端·javascript·ecmascript·es6
hoiii1871 天前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab
摘星编程1 天前
React Native + OpenHarmony:ImageSVG图片渲染
javascript·react native·react.js
会编程的土豆1 天前
新手前端小细节
前端·css·html·项目
摘星编程1 天前
OpenHarmony + RN:Text文本书写模式
javascript·react native·react.js
广州华水科技1 天前
单北斗GNSS在桥梁形变监测中的应用与技术进展分析
前端
我讲个笑话你可别哭啊1 天前
鸿蒙ArkTS快速入门
前端·ts·arkts·鸿蒙·方舟开发框架
CherryLee_12101 天前
基于poplar-annotation前端插件封装文本标注组件及使用
前端·文本标注
特立独行的猫a1 天前
C++轻量级Web框架介绍与对比:Crow与httplib
开发语言·前端·c++·crow·httplib