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, Но обычно наш почтовый запрос подается в виде формы. Итак, нам нужно изменить заголовок, чтобы:
Когда fetch отправляет запрос, в отличие от XHR, поскольку он не несет файлы cookie по умолчанию, если сайт полагается на поддержание сеанса пользователя, это может привести к неавторизованным запросам, поэтому нам нужно вручную передать файлы cookie, просто добавьтеДля того, чтобы:
Получите преимущества и недостатки
Плюсы и минусы | описание |
---|---|
преимущество | Решение обратного ада |
преимущество | Более лаконичный в использовании |
Недостаток | API низкоуровневый и должен быть инкапсулирован |
Недостаток | По умолчанию нет файлов cookie, необходимо добавить вручную |
Недостаток | Поддержка браузера не очень дружелюбна, требуется сторонний plloyfill |