Maison > interface Web > js tutoriel > le corps du texte

Le guide axios le plus complet

小云云
Libérer: 2017-12-23 09:34:40
original
2529 Les gens l'ont consulté

axios est un client HTTP basé sur Promise pour les navigateurs et nodejs. Cet article partagera avec vous la stratégie axios la plus complète avec la nouvelle que l'auteur de vuejs, You Yuxi, ne continuera plus à maintenir vue-resource, et le recommande Tout le monde a commencé à utiliser axios, et axios était compris par de plus en plus de personnes. Au départ, je voulais trouver un guide détaillé sur Internet, mais du coup j'ai découvert que la documentation officielle d'axios elle-même est très détaillée ! Par conséquent, il est recommandé à tout le monde d’apprendre ce type de bibliothèque, et il est préférable de lire sa documentation officielle en détail. J'ai traduit grossièrement la documentation officielle d'axios. Je pense que tant que vous comprenez parfaitement cet article et que vous le pratiquez, axios sera un jeu d'enfant ! !

Présentation d'axios

axios est un client HTTP basé sur Promise pour les navigateurs et nodejs. Il présente les caractéristiques suivantes :


  • Créer. XMLHttpRequest depuis le navigateur

  • Faire une requête http depuis node.js

  • API de promesse de support

  • Intercepter la demande et la réponse

  • Convertir les données de demande et de réponse

  • Annuler la demande

  • Convertir automatiquement le JSON données

  • Support client pour empêcher CSRF/XSRF

Compatibilité des navigateurs

Méthode d'introduction :

$ npm install axios
$ cnpm install axios //taobao源
$ bower install axios
或者使用cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
Copier après la connexion



Par exemple :

Exécuter la requête GET

// 向具有指定ID的用户发出请求
axios.get(&#39;/user?ID=12345&#39;)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
 
// 也可以通过 params 对象传递参数
axios.get(&#39;/user&#39;, {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Copier après la connexion

Exécuter la requête POST

axios.post(&#39;/user&#39;, {
firstName: &#39;Fred&#39;,
lastName: &#39;Flintstone&#39;
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Copier après la connexion
function getUserAccount() {
return axios.get(&#39;/user/12345&#39;);
}
 
function getUserPermissions() {
return axios.get(&#39;/user/12345/permissions&#39;);
}
 
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
//两个请求现已完成
}));
Copier après la connexion

Effectuer plusieurs tâches simultanées requêtes

API axios


Les requêtes peuvent être effectuées en transmettant la configuration pertinente à axios.

axios(config)

// 发送一个 POST 请求
axios({
method: &#39;post&#39;,
url: &#39;/user/12345&#39;,
data: {
firstName: &#39;Fred&#39;,
lastName: &#39;Flintstone&#39;
}
});
Copier après la connexion
// 发送一个 GET 请求 (GET请求是默认请求模式)
axios(&#39;/user/12345&#39;);
Copier après la connexion

axios(url[, config])

Alias ​​de méthode de demande

Pour plus de commodité Pour plus de commodité, des alias ont été fournis pour toutes les méthodes de requête prises en charge.

  • axios.request(config)

  • axios.get(url[,config])

  • axios.delete(url[,config])

  • axios.head(url[,config])

  • axios.post( url[,data[,config]])

  • axios.put(url[,data[,config]])

  • axios. patch(url[,data[,config]])

Remarque
Lors de l'utilisation de la méthode alias, il n'est pas nécessaire de spécifier l'url, la méthode et les attributs de données dans la configuration .

Concurrency

Fonction d'assistance pour gérer les requêtes simultanées.

  • axios.all (itérable)

  • axios.spread (rappel)

Créer une instance

Vous pouvez créer une nouvelle instance d'axios avec une configuration personnalisée.

axios.create([config])

var instance = axios.create({
baseURL: &#39;https://some-domain.com/api/&#39;,
timeout: 1000,
headers: {&#39;X-Custom-Header&#39;: &#39;foobar&#39;}
});
Copier après la connexion

Les méthodes d'instance disponibles sont indiquées ci-dessous. La configuration spécifiée sera fusionnée avec la configuration de l'instance. Méthodes d'instance

axios#request(config)
axios#get(url[,config])
axios#delete(url[,config])
axios #head(url[,config])
axios#post(url[,data[,config]])
axios#put(url[,data[,config]])
axios#patch( url[,data[,config]])

Configuration de la demande


Ce sont les options de configuration disponibles pour faire des demandes. Seule l'url est requise. Si aucune méthode n'est spécifiée, la requête sera par défaut GET.

{
// `url`是将用于请求的服务器URL
url: &#39;/user&#39;,
 
// `method`是发出请求时使用的请求方法
method: &#39;get&#39;, // 默认
 
// `baseURL`将被添加到`url`前面,除非`url`是绝对的。
// 可以方便地为 axios 的实例设置`baseURL`,以便将相对 URL 传递给该实例的方法。
baseURL: &#39;https://some-domain.com/api/&#39;,
 
// `transformRequest`允许在请求数据发送到服务器之前对其进行更改
// 这只适用于请求方法&#39;PUT&#39;,&#39;POST&#39;和&#39;PATCH&#39;
// 数组中的最后一个函数必须返回一个字符串,一个 ArrayBuffer或一个 Stream
 
transformRequest: [function (data) {
// 做任何你想要的数据转换
 
return data;
}],
 
// `transformResponse`允许在 then / catch之前对响应数据进行更改
transformResponse: [function (data) {
// Do whatever you want to transform the data
 
return data;
}],
 
// `headers`是要发送的自定义 headers
headers: {&#39;X-Requested-With&#39;: &#39;XMLHttpRequest&#39;},
 
// `params`是要与请求一起发送的URL参数
// 必须是纯对象或URLSearchParams对象
params: {
ID: 12345
},
 
// `paramsSerializer`是一个可选的函数,负责序列化`params`
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: &#39;brackets&#39;})
},
 
// `data`是要作为请求主体发送的数据
// 仅适用于请求方法“PUT”,“POST”和“PATCH”
// 当没有设置`transformRequest`时,必须是以下类型之一:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - Browser only: FormData, File, Blob
// - Node only: Stream
data: {
firstName: &#39;Fred&#39;
},
 
// `timeout`指定请求超时之前的毫秒数。
// 如果请求的时间超过&#39;timeout&#39;,请求将被中止。
timeout: 1000,
 
// `withCredentials`指示是否跨站点访问控制请求
// should be made using credentials
withCredentials: false, // default
 
// `adapter&#39;允许自定义处理请求,这使得测试更容易。
// 返回一个promise并提供一个有效的响应(参见[response docs](#response-api))
adapter: function (config) {
/* ... */
},
 
// `auth&#39;表示应该使用 HTTP 基本认证,并提供凭据。
// 这将设置一个`Authorization&#39;头,覆盖任何现有的`Authorization&#39;自定义头,使用`headers`设置。
auth: {
username: &#39;janedoe&#39;,
password: &#39;s00pers3cret&#39;
},
 
// “responseType”表示服务器将响应的数据类型
// 包括 &#39;arraybuffer&#39;, &#39;blob&#39;, &#39;document&#39;, &#39;json&#39;, &#39;text&#39;, &#39;stream&#39;
responseType: &#39;json&#39;, // default
 
//`xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称
xsrfCookieName: &#39;XSRF-TOKEN&#39;, // default
 
// `xsrfHeaderName`是携带xsrf令牌值的http头的名称
xsrfHeaderName: &#39;X-XSRF-TOKEN&#39;, // default
 
// `onUploadProgress`允许处理上传的进度事件
onUploadProgress: function (progressEvent) {
// 使用本地 progress 事件做任何你想要做的
},
 
// `onDownloadProgress`允许处理下载的进度事件
onDownloadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
 
// `maxContentLength`定义允许的http响应内容的最大大小
maxContentLength: 2000,
 
// `validateStatus`定义是否解析或拒绝给定的promise
// HTTP响应状态码。如果`validateStatus`返回`true`(或被设置为`null` promise将被解析;否则,promise将被
  // 拒绝。
validateStatus: function (status) {
return status >= 200 && status < 300; // default
},
 
// `maxRedirects`定义在node.js中要遵循的重定向的最大数量。
// 如果设置为0,则不会遵循重定向。
maxRedirects: 5, // 默认
 
// `httpAgent`和`httpsAgent`用于定义在node.js中分别执行http和https请求时使用的自定义代理。
// 允许配置类似`keepAlive`的选项,
// 默认情况下不启用。
httpAgent: new http.Agent({ keepAlive: true }),
httpsAgent: new https.Agent({ keepAlive: true }),
 
// &#39;proxy&#39;定义代理服务器的主机名和端口
// `auth`表示HTTP Basic auth应该用于连接到代理,并提供credentials。
// 这将设置一个`Proxy-Authorization` header,覆盖任何使用`headers`设置的现有的`Proxy-Authorization` 自定义 headers。
proxy: {
host: &#39;127.0.0.1&#39;,
port: 9000,
auth: : {
username: &#39;mikeymike&#39;,
password: &#39;rapunz3l&#39;
}
},
 
// “cancelToken”指定可用于取消请求的取消令牌
// (see Cancellation section below for details)
cancelToken: new CancelToken(function (cancel) {
})
}
Copier après la connexion
axios.get(&#39;/user/12345&#39;)
.then(function(response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
Copier après la connexion

Paramètres de configuration par défaut Lors de l'utilisation, vous recevrez une réponse comme celle-ci :


Vous pouvez spécifier les paramètres de configuration par défaut qui seront appliqués à chaque valeur de requête .

Paramètres par défaut globaux d'Axios

axios.defaults.baseURL = &#39;https://api.example.com&#39;;
axios.defaults.headers.common[&#39;Authorization&#39;] = AUTH_TOKEN;
axios.defaults.headers.post[&#39;Content-Type&#39;] = &#39;application/x-www-form-urlencoded&#39;;
Copier après la connexion
//在创建实例时设置配置默认值
var instance = axios.create({
   baseURL:&#39;https://api.example.com&#39;
});
 
//在实例创建后改变默认值
instance.defaults.headers.common [&#39;Authorization&#39;] = AUTH_TOKEN;
Copier après la connexion

Paramètres par défaut des instances personnalisées

Ordre de priorité de configuration

La configuration sera priorisée avec la fusion de manière séquentielle. L'ordre correspond aux valeurs par défaut de la bibliothèque dans lib/defaults.js, puis à l'attribut par défaut de l'instance et enfin aux paramètres de configuration de la requête. Cette dernière primera sur la première. Voici un exemple.

//使用库提供的配置默认值创建实例
//此时,超时配置值为`0`,这是库的默认值
var instance = axios.create();
 
//覆盖库的超时默认值
//现在所有请求将在超时前等待2.5秒
instance.defaults.timeout = 2500;
 
//覆盖此请求的超时,因为它知道需要很长时间
instance.get(&#39;/ longRequest&#39;,{
   timeout:5000
});
Copier après la connexion


Intercepteur

Vous pouvez intercepter la demande ou la réponse avant qu'elle ne soit traitée d'ici là ou attraper

//添加请求拦截器
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);
   });
Copier après la connexion
var myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);
Copier après la connexion

Vous peut ajouter l'intercepteur à une instance personnalisée d'axios. Si vous devrez peut-être supprimer l'intercepteur plus tard.

var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});
Copier après la connexion


Gestion des erreurs

axios.get(&#39;/ user / 12345&#39;)
   .catch(function(error){
     if(error.response){
       //请求已发出,但服务器使用状态代码进行响应
       //落在2xx的范围之外
       console.log(error.response.data);
       console.log(error.response.status);
       console.log(error.response.headers);
     } else {
       //在设置触发错误的请求时发生了错误
       console.log(&#39;Error&#39;,error.message);
     }}
     console.log(error.config);
   });
Copier après la connexion
axios.get(&#39;/ user / 12345&#39;,{
   validateStatus:function(status){
     return status < 500; //仅当状态代码大于或等于500时拒绝
   }}
})
Copier après la connexion

Élimination Vous pouvez définir une plage d'erreurs de code d'état HTTP personnalisée à l'aide de l'option de configuration validateStatus.


Vous pouvez annuler la demande à l'aide d'un jeton d'annulation.

L'API d'annulation de jeton d'axios est basée sur une proposition de promesse annulable et est actuellement en phase 1.

Vous pouvez créer un jeton d'annulation en utilisant la fabrique CancelToken.source comme ceci :

var CancelToken = axios.CancelToken;
var source = CancelToken.source();
 
axios.get(&#39;/user/12345&#39;, {
cancelToken: source.token
}).catch(function(thrown) {
if (axios.isCancel(thrown)) {
console.log(&#39;Request canceled&#39;, thrown.message);
} else {
// 处理错误
}
});
 
//取消请求(消息参数是可选的)
source.cancel(&#39;操作被用户取消。&#39;);
Copier après la connexion
var CancelToken = axios.CancelToken;
var cancel;
 
axios.get(&#39;/ user / 12345&#39;,{
   cancelToken:new CancelToken(function executor(c){
     //一个执行器函数接收一个取消函数作为参数
     cancel = c;
   })
});
 
// 取消请求
clear();
Copier après la connexion


REMARQUE : vous pouvez utiliser le même le jeton d'annulation annule plusieurs demandes.
Vous pouvez également créer un jeton d'annulation en passant une fonction d'exécuteur au constructeur CancelToken :

Utilisation du format application/x-www-form-urlencoded


Par défaut Ci-dessous, axios sérialise les objets JavaScript en JSON. Pour envoyer des données au format application/x-www-form-urlencoded, vous pouvez utiliser l'une des options suivantes.

浏览器

在浏览器中,您可以使用URLSearchParams API,如下所示:

var params = new URLSearchParams();
params.append(&#39;param1&#39;, &#39;value1&#39;);
params.append(&#39;param2&#39;, &#39;value2&#39;);
axios.post(&#39;/foo&#39;, params);
Copier après la connexion


或者,您可以使用qs库对数据进行编码:
请注意,所有浏览器都不支持URLSearchParams,但是有一个polyfill可用(确保polyfill全局环境)。

var qs = require(&#39;qs&#39;);
axios.post(&#39;/foo&#39;, qs.stringify({ &#39;bar&#39;: 123 });
Copier après la connexion

在node.js中,可以使用querystring模块,如下所示:Node.js

var querystring = require(&#39;querystring&#39;);
axios.post(&#39;http://something.com/&#39;, querystring.stringify({ foo: &#39;bar&#39; });
Copier après la connexion

Promise你也可以使用qs库。


axios 依赖本机要支持ES6 Promise实现。 如果您的环境不支持ES6 Promises,您可以使用polyfill。

TypeScript


axios包括TypeScript定义。

import axios from &#39;axios&#39;;
axios.get(&#39;/user?ID=12345&#39;);
Copier après la connexion

axios在很大程度上受到Angular提供的$http服务的启发。 最终,axios努力提供一个在Angular外使用的独立的$http-like服务。

学完本文相信大家对axios更加深入了解了吧,赶紧收藏起来吧。

相关推荐:

vue配置axios的方法步骤示例

关于VueJs 搭建Axios接口请求工具分析

浅谈axios中的get,post方法介绍

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!