Axios — это популярная библиотека для выполнения HTTP-запросов в Node.js и браузере. Она предоставляет простой и интуитивно понятный API для выполнения асинхронных запросов, а также поддерживает Promise API, что делает работу с асинхронным кодом удобной и гибкой.
Основные возможности Axios
- Поддержка запросов GET, POST, PUT, DELETE и других HTTP-методов.
- Возможность настройки заголовков запросов.
- Поддержка интерсепторов для обработки запросов и ответов.
- Поддержка работы с JSON-данными по умолчанию.
- Возможность выполнения запросов с указанием таймаута.
- Поддержка загрузки и отправки файлов.
- Поддержка обработки ошибок и управления ошибками.
Установка
npm install axios
Или с использованием Yarn:
yarn add axios
Основное использование
const axios = require('axios');
// Пример GET-запроса
axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
// Пример POST-запроса
axios.post('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error posting data:', error);
});
Настройка заголовков
const axios = require('axios');
axios.get('https://jsonplaceholder.typicode.com/posts/1', {
headers: {
'Authorization': 'Bearer token'
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
Использование интерсепторов
Интерсепторы позволяют перехватывать запросы или ответы перед их обработкой. Это может быть полезно для добавления общих заголовков или логирования.
const axios = require('axios');
// Интерсептор запроса
axios.interceptors.request.use(config => {
console.log('Request:', config);
return config;
}, error => {
return Promise.reject(error);
});
// Интерсептор ответа
axios.interceptors.response.use(response => {
console.log('Response:', response);
return response;
}, error => {
return Promise.reject(error);
});
axios.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
Отправка файлов
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('file', fs.createReadStream('/path/to/file'));
axios.post('https://jsonplaceholder.typicode.com/posts', form, {
headers: {
...form.getHeaders()
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error uploading file:', error);
});
Установка таймаута для запросов
const axios = require('axios');
axios.get('https://jsonplaceholder.typicode.com/posts/1', {
timeout: 5000 // Таймаут в миллисекундах
})
.then(response => {
console.log(response.data);
})
.catch(error => {
if (error.code === 'ECONNABORTED') {
console.error('Request timeout:', error);
} else {
console.error('Error fetching data:', error);
}
});
Обработка ошибок
Axios предоставляет удобные способы обработки ошибок, включая проверку кодов состояния ответа.
const axios = require('axios');
axios.get('https://jsonplaceholder.typicode.com/invalid-url')
.then(response => {
console.log(response.data);
})
.catch(error => {
if (error.response) {
// Сервер ответил с кодом состояния, отличным от 2xx
console.error('Response error:', error.response.status);
} else if (error.request) {
// Запрос был отправлен, но ответа не было получено
console.error('Request error:', error.request);
} else {
// Произошла ошибка при настройке запроса
console.error('Axios error:', error.message);
}
});
Асинхронные функции
Вы также можете использовать Axios с асинхронными функциями для более чистого и понятного кода.
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/posts/1');
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Параллельные запросы
Axios позволяет выполнять параллельные запросы с помощью функции axios.all
и метода axios.spread
.
const axios = require('axios');
async function fetchMultipleData() {
try {
const [response1, response2] = await axios.all([
axios.get('https://jsonplaceholder.typicode.com/posts/1'),
axios.get('https://jsonplaceholder.typicode.com/posts/2')
]);
console.log('Response 1:', response1.data);
console.log('Response 2:', response2.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchMultipleData();
Создание экземпляра Axios с настройками по умолчанию
Вы можете создать экземпляр Axios с предустановленными настройками для использования в вашем приложении.
const axios = require('axios');
const instance = axios.create({
baseURL: 'https://jsonplaceholder.typicode.com',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
instance.get('/posts/1')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
Заключение
Axios — это мощная библиотека для выполнения HTTP-запросов в Node.js и браузере. Она предоставляет гибкий и интуитивно понятный API для выполнения запросов, обработки ответов и управления ошибками. Благодаря поддержке асинхронных функций и интерсепторов, Axios позволяет создавать чистый и поддерживаемый код для работы с сетевыми запросами.