Axios homepage

Using application/x-www-form-urlencoded format

By default, axios serializes JavaScript objects to . To send data in the format instead, you can use one of the following options.

Browser

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Alternatively, you can encode data using the library:

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

Or in another way (ES6),

import qs from 'qs';
const data = { 'bar': 123 };
const options = {
  method: 'POST',
  headers: { 'content-type': 'application/x-www-form-urlencoded' },
  data: qs.stringify(data),
  url,
};
axios(options);

Query string

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());

You can also use the library.

NOTE

The library is preferable if you need to stringify nested objects, as the method has known issues with that use case (https://github.com/nodejs/node-v0.x-archive/issues/1665).

Form data

In node.js, you can use the library as follows:

const FormData = require('form-data');
 
const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

axios.post('https://example.com', form, { headers: form.getHeaders() })

Alternatively, use an interceptor:

axios.interceptors.request.use(config => {
  if (config.data instanceof FormData) {
    Object.assign(config.headers, config.data.getHeaders());
  }
  return config;
});

axios API

Requests can be made by passing the relevant config to .

axios(config)
// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});
// GET request for remote image in node.js
axios({
  method: 'get',
  url: 'http://bit.ly/2mTM3nY',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });
axios(url)
// Send a GET request (default method)
axios('/user/12345');

Request method aliases

For convenience aliases have been provided for all supported request methods.

axios.patch(url])
NOTE

When using the alias methods , , and properties don’t need to be specified in config.

Concurrency (Deprecated)

Please use to replace the below functions.

Helper functions for dealing with concurrent requests.

axios.all(iterable)
axios.spread(callback)

Creating an instance

You can create a new instance of axios with a custom config.

axios.create()
const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

Instance methods

The available instance methods are listed below. The specified config will be merged with the instance config.

Config Defaults

You can specify config defaults that will be applied to every request.

Global axios defaults

axios.defaults.baseURL = 'https://api.example.com';

// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them.
// See below for an example using Custom instance defaults instead.
axios.defaults.headers.common'Authorization' = AUTH_TOKEN;

axios.defaults.headers.post'Content-Type' = 'application/x-www-form-urlencoded';

Custom instance defaults

// Set config defaults when creating the instance
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// Alter defaults after instance has been created
instance.defaults.headers.common'Authorization' = AUTH_TOKEN;

Config order of precedence

Config will be merged with an order of precedence. The order is library defaults found in , then property of the instance, and finally argument 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 library
const instance = axios.create();

// Override timeout default for the library
// Now all requests using this instance will wait 2.5 seconds before timing out
instance.defaults.timeout = 2500;

// Override timeout for this request as it's known to take a long time
instance.get('/longRequest', {
  timeout: 5000
});

Самое интересное

  • Я надеюсь на революцию в РПЦ — просмотров: 130 601
  • Олег Курзаков: О причинах моего ухода из клира Красноярской епархии и сложении священного сана — просмотров: 87 106
  • «Дали бы мне палку! Ух, я б вам…!»: феномен Андрея Ткачева — просмотров: 67 399
  • Мария Кикоть: Мне искренне жаль игуменью Николаю — она тоже жертва системы — просмотров: 63 562
  • Протоиерей Андрей Ткачев назвал иерархов РПЦ бандитами и ряжеными, а саму РПЦ — расколом — просмотров: 62 732
  • И в голове один вопрос: «А судьи кто?» — просмотров: 53 671
  • Ответ анонимного священника брезгливому батюшке — просмотров: 46 356
  • Протоиерей Вячеслав Баскаков: Я прошу прощения у всех, кого ввел в поношение через меня Святой Церкви — просмотров: 44 537
  • Инвалиды духовной войны — просмотров: 37 862
  • Опасный вопрос: кому пора на пенсию? — просмотров: 36 001

Interceptors

You can intercept requests or responses before they are handled by or .

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });

If you need to remove an interceptor later you can.

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

You can add interceptors to a custom instance of axios.

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay
in the execution of your axios request when the main thread is blocked (a promise is created under the hood for
the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag
to the options object that will tell axios to run the code synchronously and avoid any delays in request execution.

axios.interceptors.request.use(function (config) {
  config.headers.test = 'I am only a header!';
  return config;
}, null, { synchronous: true });

If you want to execute a particular interceptor based on a runtime check,
you can add a function to the options object. The interceptor will not be executed if and only if the return
of is . The function will be called with the config
object (don’t forget that you can bind your own arguments to it as well.) This can be handy when you have an
asynchronous request interceptor that only needs to run at certain times.

function onGetCall(config) {
  return config.method === 'get';
}
axios.interceptors.request.use(function (config) {
  config.headers.test = 'special get headers';
  return config;
}, null, { runWhen: onGetCall });

Архивы

АрхивыВыберите месяц Сентябрь 2021  (37) Август 2021  (61) Июль 2021  (95) Июнь 2021  (64) Май 2021  (101) Апрель 2021  (85) Март 2021  (71) Февраль 2021  (86) Январь 2021  (98) Декабрь 2020  (116) Ноябрь 2020  (109) Октябрь 2020  (135) Сентябрь 2020  (135) Август 2020  (162) Июль 2020  (143) Июнь 2020  (141) Май 2020  (173) Апрель 2020  (256) Март 2020  (195) Февраль 2020  (127) Январь 2020  (106) Декабрь 2019  (151) Ноябрь 2019  (122) Октябрь 2019  (132) Сентябрь 2019  (140) Август 2019  (132) Июль 2019  (150) Июнь 2019  (118) Май 2019  (130) Апрель 2019  (136) Март 2019  (122) Февраль 2019  (137) Январь 2019  (156) Декабрь 2018  (182) Ноябрь 2018  (143) Октябрь 2018  (146) Сентябрь 2018  (104) Август 2018  (82) Июль 2018  (99) Июнь 2018  (63) Май 2018  (67) Апрель 2018  (65) Март 2018  (69) Февраль 2018  (64) Январь 2018  (69) Декабрь 2017  (59) Ноябрь 2017  (70) Октябрь 2017  (56) Сентябрь 2017  (55) Август 2017  (55) Июль 2017  (75) Июнь 2017  (62) Май 2017  (64) Апрель 2017  (46) Март 2017  (54) Февраль 2017  (35)

Cancellation

You can cancel a request using a cancel token.

You can create a cancel token using the factory as shown below:

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 {
    // handle error
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');

You can also create a cancel token by passing an executor function to the constructor:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  })
});

// cancel the request
cancel();

Example

note: CommonJS usage

In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with use the following approach:

const axios = require('axios').default;

// axios.<method> will now provide autocomplete and parameter typings

Performing a request

const axios = require('axios');

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

// Optionally the request above could also be done as
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });  

// Want to use async/await? Add the `async` keyword to your outer function/method.
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

Performing a request

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Performing multiple concurrent requests

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

Promise.all(getUserAccount(), getUserPermissions())
  .then(function (results) {
    const acct = results;
    const perm = results1;
  });

Response Schema

The response for a request contains the following information.

{
  // `data` is the response that was provided by the server
  data: {},

  // `status` is the HTTP status code from the server response
  status: 200,

  // `statusText` is the HTTP status message from the server response
  statusText: 'OK',

  // `headers` the HTTP headers that the server responded with
  // All header names are lower cased and can be accessed using the bracket notation.
  // Example: `response.headers`
  headers: {},

  // `config` is the config that was provided to `axios` for the request
  config: {},

  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance in the browser
  request: {}
}

When using , you will receive the response as follows:

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);
  });

Handling Errors

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

Using the config option, you can define HTTP code(s) that should throw an error.

axios.get('/user/12345', {
  validateStatus: function (status) {
    return status < 500; // Resolve only if the status code is less than 500
  }
})

Using you get an object with more information about the HTTP error.

axios.get('/user/12345')
  .catch(function (error) {
    console.log(error.toJSON());
  });

Fetch

Fetch — очень хорошая альтернатива Ajax, и весьма вероятно, что в будущем она полностью заменит Ajax. Давайте сначала посмотрим на поддержку браузера: Мы видим, что браузер IE вообще не поддерживает Fetch, и многие мобильные браузеры не поддерживают Fetch, но вы можете использовать сторонний plloyfill для получения поддержки.Github.fetch

Получить письмо

Независимо от того, является ли это родным Ajax или инкапсулированным в JQuery Ajax, есть проблема с адом обратного вызова. Fetch решает эту проблему очень дружелюбно, и fetch выглядит так:

Это дает людям синхронный процесс для написания асинхронных операций и успешно решает проблему ада обратного вызова. Fetch может это сделать, потому что Fetch API основан наРазработанный. А вызов выборки очень прост, потому что он привязан к спецификации и принадлежит глобальному методу.

Получить получить данные

Когда мы используем Fetch для получения данных, он возвращает нам объект Pormise. Давайте кратко рассмотрим:

Результат выглядит следующим образом: OK — это истина, а статус — 200. Мы видим, что в нем нет данных, которые нам нужны. Фактически, данные находятся в атрибуте body, который является формой потока данных. Обычный сервер Он вернет нам формат данных JSON, мы можем вызвать response.json для преобразования данных:

После обработки продолжаем, после чего можно будет получить обработанные данные. Таким образом, получить данные с помощью Fetch очень просто.

Получить данные для отправки

Получение данных для отправки также очень простое, API выглядит так:

Второй параметр передаст объект для настройки запрошенной информации. Давайте сначала посмотрим на пример:

Описание входящих параметров:

имя параметра описание
method Метод запроса, по умолчанию GET
headers Заголовок запроса
body Тема запроса

Стоит отметить, что заголовок сообщения по умолчанию для fetch, Но обычно наш почтовый запрос подается в виде формы. Итак, нам нужно изменить заголовок, чтобы:

Доставка файлов cookie

Когда fetch отправляет запрос, в отличие от XHR, поскольку он не несет файлы cookie по умолчанию, если сайт полагается на поддержание сеанса пользователя, это может привести к неавторизованным запросам, поэтому нам нужно вручную передать файлы cookie, просто добавьтеДля того, чтобы:

Получите преимущества и недостатки

Плюсы и минусы описание
преимущество Решение обратного ада
преимущество Более лаконичный в использовании
Недостаток API низкоуровневый и должен быть инкапсулирован
Недостаток По умолчанию нет файлов cookie, необходимо добавить вручную
Недостаток Поддержка браузера не очень дружелюбна, требуется сторонний plloyfill
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector