Cette fois, je vais vous montrer comment axios utilise un client de requête HTTP basé sur Promise. Quelles sont les précautions pour le client de requête HTTP basé sur Promise d'axios. Voici des cas pratiques, jetons un coup d'oeil.
axios
Client de requête HTTP basé sur des promesses, qui peut être utilisé simultanément dans les navigateurs et node.js
Fonctionnalités fonctionnelles
Envoyer des requêtes XMLHttp dans le navigateur
Envoyer des requêtes http dans node.js
Support PromiseAPI
Intercepter les requêtes et les réponses
Convertir les requêtes et les réponses data
Convertir automatiquement les données JSON
Prise en charge du client pour protéger la sécurité contre les attaques XSRF
Prise en charge du navigateur
Installation
Utiliser Bower :
$ bower install axios
Utilisez npm :
$ npm install axios
Exemple
Envoyer une requête GET
// Make a request for a user with a given IDaxios.get('/user?ID=12345').then(function(response){console.log(response);}).catch(function(response){console.log(response);}); // Optionally the request above could also be done asaxios.get('/user',{params:{ID:12345}}).then(function(response){console.log(response);}).catch(function(response){console.log(response);});
Envoyer uneDemande POST
axios.post('/user',{firstName:'Fred',lastName:'Flintstone'}).then(function(response){console.log(response);}).catch(function(response){console.log(response);});
Envoyer plusieurs requêtes simultanées
functiongetUserAccount(){returnaxios.get('/user/12345');}functiongetUserPermissions(){returnaxios.get('/user/12345/permissions');}axios.all([getUserAccount(),getUserPermissions()]).then(axios.spread(function(acct,perms){// Both requests are now complete}));
L'API axios
peut être personnalisée en transmettant les paramètres correspondants aux requêtes axios :
axios(config) // Send a POST requestaxios({method:'post',url:'/user/12345',data:{firstName:'Fred',lastName:'Flintstone'}}); axios(url[, config]) // Sned a GET request (default method)axios('/user/12345');
Méthodes de requête Alias
Pour plus de commodité, nous avons fourni des alias
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]])
pour toutes les méthodes de requête prises en charge Remarque
Quand en utilisant la méthode alias, les attributs url, méthode et data n'ont pas besoin d'être spécifiés dans les paramètres de configuration.
Concurrency
Méthodes d'aide pour gérer les requêtes simultanées
axios.all(iterable) axios.spread(callback)
Créer une instance
Vous pouvez créer une nouvelle instance axios avec une configuration personnalisée.
axios.create([config]) varinstance=axios.create({baseURL:'https://some-domain.com/api/',timeout:1000,headers:{'X-Custom-Header':'foobar'}});
Méthodes d'instance
Toutes les méthodes d'instance disponibles sont répertoriées ci-dessous, et la configuration spécifiée sera fusionnée avec la configuration de l'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
Voici les éléments de configuration de la demande disponibles, seule l'URL est requise. Si aucune méthode n'est spécifiée, la méthode de requête par défaut est GET.
{// `url` is the server URL that will be used for the requesturl:'/user', // `method` is the request method to be used when making the requestmethod:'get', // default// `baseURL` will be prepended to `url` unless `url` is absolute. // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs // to methods of that instance.baseURL:' // `transformRequest` allows changes to the request data before it is sent to the server // This is only applicable for request methods 'PUT', 'POST', and 'PATCH' // The last function in the array must return a string or an ArrayBuffertransformRequest:[function(data){ // Do whatever you want to transform the datareturndata;}], // `transformResponse` allows changes to the response data to be made before // it is passed to then/catchtransformResponse:[function(data){ // Do whatever you want to transform the datareturndata;}], // `headers` are custom headers to be sentheaders:{'X-Requested-With':'XMLHttpRequest'}, // `params` are the URL parameters to be sent with the requestparams:{ID:12345}, // `paramsSerializer` is an optional function in charge of serializing `params` // (e.g. https://www.npmjs.com/package/qs, paramsSerializer:function(params){returnQs.stringify(params,{arrayFormat:'brackets'})}, // `data` is the data to be sent as the request body// Only applicable for request methods 'PUT', 'POST', and 'PATCH' // When no `transformRequest` is set, must be a string, an ArrayBuffer or a hashdata:{firstName:'Fred'}, // `timeout` specifies the number of milliseconds before the request times out. // If the request takes longer than `timeout`, the request will be aborted.timeout:1000, // `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentialswithCredentials:false, // default// `adapter` allows custom handling of requests which makes testing easier. // Call `resolve` or `reject` and supply a valid response (see [response docs](#response-api)).adapter:function(resolve,reject,config){/* ... */}, // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. // This will set an `Authorization` header, overwriting any existing // `Authorization` custom headers you have set using `headers`.auth:{username:'janedoe',password:'s00pers3cret'} // `responseType` indicates the type of data that the server will respond with // options are 'arraybuffer', 'blob', 'document', 'json', 'text'responseType:'json', // default// `xsrfCookieName` is the name of the cookie to use as a value for xsrf tokenxsrfCookieName:'XSRF-TOKEN', // default// `xsrfHeaderName` is the name of the http header that carries the xsrf token valuexsrfHeaderName:'X-XSRF-TOKEN', // default// `progress` allows handling of progress events for 'POST' and 'PUT uploads' // as well as 'GET' downloadsprogress:function(progressEvent){ // Do whatever you want with the native progress event}}
Structure des données de réponse
Les données de réponse comprennent les informations suivantes :
{// `data` is the response that was provided by the serverdata:{}, // `status` is the HTTP status code from the server responsestatus:200, // `statusText` is the HTTP status message from the server responsestatusText:'OK', // `headers` the headers that the server responded withheaders:{}, // `config` is the config that was provided to `axios` for the requestconfig:{}}
Lorsque vous utilisez then ou catch, vous recevrez la réponse suivante :
axios.get('/user/12345').then(function(response){console.log(response.data);console.log(response.status);console.log(response.statusText);console.log(response.headers);console.log(response.config);});
Configuration par défaut
Vous pouvez spécifier la configuration par défaut pour chaque requête.
Configuration globale par défaut d'axios
axios.defaults.baseURL='https: //api.example.com';axios.defaults.headers.common['Authorization']=AUTH_TOKEN;axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
Configuration par défaut de l'instance personnalisée
// Set config defaults when creating the instancevarinstance=axios.create({baseURL:' // Alter defaults after instance has been createdinstance.defaults.headers.common['Authorization']=AUTH_TOKEN;
Priorité de configuration
Config will be merged with an order of precedence. The order is library defaults found inlib /defaults.js, thendefaultsproperty of the instance, and finallyconfigargument for the request. The latter will take precedence over the former. Here's an example. // Create an instance using the config defaults provided by the library // At this point the timeout config value is `0` as is the default for the libraryvarinstance=axios.create(); // Override timeout default for the library // Now all requests will wait 2.5 seconds before timing outinstance.defaults.timeout=2500; // Override timeout for this request as it's known to take a long timeinstance.get('/longRequest',{timeout:5000});
Intercepteur
Vous pouvez intercepter les requêtes et les réponses avant de les traiter ou d'attraper
// 添加一个请求拦截器axios.interceptors.request.use(function(config){ // Do something before request is sentreturnconfig;},function(error){ // Do something with request errorreturnPromise.reject(error);}); // 添加一个响应拦截器axios.interceptors.response.use(function(response){ // Do something with response datareturnresponse;},function(error){ // Do something with response errorreturnPromise.reject(error);});
Supprimer un intercepteur :
varmyInterceptor=axios.interceptors.request.use(function(){/*...*/});axios.interceptors.request.eject(myInterceptor);
Vous pouvez ajouter un intercepteur à une instance axios personnalisée :
varinstance=axios.create();instance.interceptors.request.use(function(){/*...*/}); 错误处理 axios.get('/user/12345').catch(function(response){if(responseinstanceofError){ // Something happened in setting up the request that triggered an Errorconsole.log('Error',response.message);}else{ // The request was made, but the server responded with a status code // that falls out of the range of 2xxconsole.log(response.data);console.log(response.status);console.log(response.headers);console.log(response.config);}}); Promises axios 依赖一个原生的 ES6 Promise 实现,如果你的浏览器环境不支持 ES6 Promises,你需要引入polyfill TypeScript axios 包含一个TypeScript定义 /// import*asaxiosfrom'axios';axios.get('/user?ID=12345'); Credits axios is heavily inspired by the$http serviceprovided inAngular. Ultimately axios is an effort to provide a standalone$http-like service for use outside of Angular. License MIT
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web PHP chinois !
Lecture connexe :
Comment VUE utilise anmate.css
Comment résoudre le problème de l'icône de police Iview manquante dans l'étagère vue-cli
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!