Axios是一个基于Promise的网络请求库,支持在浏览器和Node.js环境中使用,其设计目标是提供简单易用的API,并且具有丰富的功能和扩展性。
一、Axios简介
Axios 是一个基于Promise的HTTP客户端,适用于浏览器和Node.js环境,它是同构的(isomorphic),意味着可以使用同一套代码在浏览器和Node.js中运行,在服务器端,它使用原生的Node.js http模块,而在客户端(浏览器)则使用XMLHttpRequests。
二、Axios特性
特性 | 描述 |
基于Promise | Axios 返回一个Promise对象,使得异步请求的处理更加方便。 |
跨平台 | 同时支持浏览器和Node.js环境。 |
请求/响应拦截 | 可以对请求和响应进行拦截和处理。 |
取消请求 | 支持在请求发出后取消请求。 |
超时处理 | 支持设置请求超时时间。 |
自动转换数据 | 自动将请求体序列化为JSON、多部分/表单数据、URL编码形式等。 |
防御XSRF | 在客户端支持防御跨站请求伪造攻击。 |
进度捕获 | 提供请求和响应的进度信息。 |
带宽限制 | 可以为Node.js设置带宽限制。 |
兼容标准 | 兼容符合规范的FormData和Blob(包括Node.js)。 |
三、Axios安装方法
1. 使用npm安装
npm install axios
2. 使用bower安装
bower install axios
3. 使用yarn安装
yarn add axios
4. 使用CDN引入
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
5. 预构建的CommonJS模块导入
const axios = require('axios/dist/browser/axios.cjs'); // browser const axios = require('axios/dist/node/axios.cjs'); // node
四、Axios实例及配置
1. 创建Axios实例
const axios = require('axios').create({ baseURL: 'https://api.example.com', timeout: 1000, headers: {'X-Custom-Header': 'foobar'} });
2. 发送GET请求
axios.get('/user/12345') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
3. 发送POST请求
axios.post('/user/12345', { firstName: 'Fred', lastName: 'Flintstone' }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
4. 发送带有请求配置的请求
axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } });
五、拦截器与错误处理
1. 请求拦截器
axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); });
2. 响应拦截器
axios.interceptors.response.use(function (response) { // 对响应数据做点什么 return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); });
3. 错误处理
axios.get('/user/12345') .then(function (response) { console.log(response); }) .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); });
六、取消请求与请求体编码
1. 取消请求
let cancelToken = axios.CancelToken; let source = cancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function (thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { // handle error console.log('Error', thrown); } }); // Cancel the request (the message parameter is optional) source.cancel('Operation canceled by the user.');
2. URL编码的主体请求
axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' }, transformRequest: [function (data, headers) { return data; // Return the data as is, without transformation }], paramsSerializer: function(params) { return qs.stringify(params, { arrayFormat: 'brackets' }); //params
will be stringified usingqs
library and sent as a URL-encoded query string in the request } });
3. 多部分实体请求
const formData = new FormData(); formData.append('file', file); axios({ method: 'post', url: '/upload', data: formData, headers: {'Content-Type': 'multipart/form-data'} });
4. HTML表单作为JSON发送
axios({ method: 'post', url: '/submit', data: { firstName: 'Fred', lastName: 'Flintstone' }, transformRequest: [function (data, headers) { return JSON.stringify(data); // Return a string of the JSON representation of or the object to be sent in the request body }], headers: {'Content-Type': 'application/json'} // Set the content type header to application/json for sending JSON data });
七、相关问题与解答栏目
Q1:如何在Axios中处理超时?
A:可以在创建Axios实例时通过配置项设置超时时间,timeout: 1000
,也可以在每次请求时单独设置超时时间,axios.get('/user/12345', {timeout: 1000})
,如果请求超过设定的超时时间,则会抛出一个错误。
Q:如何取消Axios的请求?
A:可以使用CancelToken
来取消请求,首先创建一个CancelToken
源,然后在请求配置中添加cancelToken
属性,调用source.cancel()
方法即可取消请求。
到此,以上就是小编对于“axios官方网站”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/648341.html