Axios

Axios 是一个基于 Promise 的 HTTP 客户端库,可在浏览器和 Node.js 环境中使用。它主要用于简化 Web 应用程序与服务器之间的 HTTP 通信。

== 概述 ==

Axios 于 2014 年首次发布,目前是一个在 GitHub 上积极维护的开源项目。它基于 XMLHttpRequest 接口,提供 JSON 数据自动转换、请求/响应拦截、自动转换、客户端 XSRF 保护等多种功能。

== 主要功能 ==

  • Promise API 支持:提供基于 Promise 的 API 以处理异步请求。
  • 请求/响应拦截:可拦截 HTTP 请求和响应,进行修改或日志记录。
  • 自动 JSON 转换:将从服务器接收的 JSON 数据自动转换为 JavaScript 对象。
  • 取消请求:提供取消请求的功能。
  • 并发请求:可同时执行多个请求并处理结果。
  • CSRF 保护:支持客户端跨站请求伪造保护。
  • 浏览器/Node.js 兼容:可在两种环境中使用。

== 安装 ==

=== npm ===

bash

npm install axios

=== yarn ===

bash

yarn add axios

=== CDN ===

html

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

== 基本用法 ==

=== GET 请求 ===

javascript

axios.get('/user?ID=12345')

.then(function (response) {

console.log(response.data);

})

.catch(function (error) {

console.log(error);

});

=== POST 请求 ===

javascript

axios.post('/user', {

firstName: 'John',

lastName: 'Doe'

})

.then(function (response) {

console.log(response);

})

.catch(function (error) {

console.log(error);

});

=== 并发请求 ===

javascript

function getUserAccount() {

return axios.get('/user/12345');

}

function getUserPermissions() {

return axios.get('/user/12345/permissions');

}

axios.all([getUserAccount(), getUserPermissions()])

.then(axios.spread(function (acct, perms) {

// 两个请求都已完成

}));

== 配置选项 ==

在 Axios 请求中可以设置多种配置选项:

javascript

{

// 请求 URL

url: '/user',

// 请求方法(默认值:'get')

method: 'get',

// 基础 URL

baseURL: 'https://api.example.com',

// 请求头

headers: {'X-Requested-With': 'XMLHttpRequest'},

// 请求参数

params: {

ID: 12345

},

// 请求数据(用于 POST、PUT、PATCH 请求)

data: {

firstName: 'John'

},

// 请求超时时间(毫秒)

timeout: 1000,

// 响应类型(默认值:'json')

responseType: 'json'

}

== 拦截器 ==

可以在请求或响应被 then 或 catch 处理之前拦截它们:

javascript

// 请求拦截器

axios.interceptors.request.use(function (config) {

// 请求前处理

return config;

}, function (error) {

// 请求错误处理

return Promise.reject(error);

});

// 响应拦截器

axios.interceptors.response.use(function (response) {

// 响应数据处理

return response;

}, function (error) {

// 响应错误处理

return Promise.reject(error);

});

== 错误处理 ==

Axios 支持多种错误处理方式:

javascript

axios.get('/user/12345')

.catch(function (error) {

if (error.response) {

// 服务器返回了超出 2xx 范围的状态码

console.log(error.response.data);

console.log(error.response.status);

console.log(error.response.headers);

} else if (error.request) {

// 请求已发出但未收到响应

console.log(error.request);

} else {

// 请求配置时发生错误

console.log('Error', error.message);

}

console.log(error.config);

});

== 取消令牌 ==

可以使用取消令牌来取消请求:

javascript

const CancelToken = axios.CancelToken;

const source = CancelToken.source();

axios.get('/user/12345', {

cancelToken: source.token

}).catch(function (thrown) {

if (axios.isCancel(thrown)) {

console.log('Request canceled', thrown.message);

} else {

// 错误处理

}

});

// 取消请求

source.cancel('Operation canceled by the user.');

== 创建实例 ==

可以创建具有自定义配置的 Axios 实例:

javascript

const instance = axios.create({

baseURL: 'https://api.example.com',

timeout: 1000,

headers: {'X-Custom-Header': 'foobar'}

});

== 浏览器支持 ==

Axios 支持以下浏览器:

  • Chrome
  • Firefox
  • Safari
  • Edge
  • Internet Explorer 11

== 相关项目 ==

  • axios-retry:请求失败时自动重试功能
  • axios-mock-adapter:用于测试的模拟适配器
  • vue-axios:与 Vue.js 的集成
  • react-axios:React 组件

== 参考资料 ==

[[分类:JavaScript 库]]

[[分类:HTTP 客户端]]

[[分类:开源软件]]