Знакомство с Node.js немыслимо без умения отправлять HTTP-запросы. Это основа для взаимодействия с внешними API, создания бэкенда для веб-приложений и многого другого. Если вы новичок и хотите разобраться, как получать данные с серверов или отправлять их, это руководство для вас.
В этой статье мы рассмотрим самые популярные способы выполнения GET и POST запросов в Node.js, с простыми и рабочими примерами кода, включая варианты на TypeScript.

Что такое GET и POST запросы?
Прежде чем мы начнем, давайте быстро разберемся в основах:
- GET-запрос: Используется для получения данных с сервера. Когда вы вводите адрес сайта в браузере, вы отправляете GET-запрос. Вся необходимая информация передается прямо в URL.
- POST-запрос: Используется для отправки данных на сервер для их создания или обновления. Например, когда вы заполняете форму регистрации на сайте и нажимаете “Отправить”, ваши данные уходят на сервер с помощью POST-запроса. Данные передаются в “теле” запроса, а не в URL.
Подготовка
Установите Node.js и пакетный менеджер npm. Для TypeScript потребуется также ts-node и typescript:
npm install -g ts-node typescript
Node-fetch
Начиная с версии Node.js 18, Fetch API доступен глобально, что делает его стандартным и удобным способом для выполнения запросов без установки сторонних библиотек. Синтаксис fetch
основан на промисах и идеально сочетается с async/await
.
Для Node.js v18+ установка не требуется. Для более старых версий:
npm install node-fetch
JavaScript
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('Ошибка сети');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error);
}
}
fetchData();
TypeScript
TypeScript добавляет безопасность типов, что очень полезно при работе с API.
interface ApiResponse {
id: number;
name: string;
}
async function fetchData(): Promise<void> {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('Ошибка сети');
const data: ApiResponse = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error);
}
}
Axios
Axios — это, пожалуй, самая популярная и удобная библиотека для HTTP-запросов. Она работает как в Node.js, так и в браузере, имеет простой синтаксис, автоматически преобразует JSON и лучше обрабатывает ошибки.
npm install axios
GET-запрос с помощью axios
Axios упрощает работу с промисами и предоставляет удобные методы.
JavaScript
const axios = require('axios');
async function getUsersWithAxios() {
try {
// .get() возвращает объект ответа, данные находятся в свойстве `data`
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
console.log(response.data);
} catch (error) {
console.error('Не удалось получить пользователей:', error.message);
}
}
getUsersWithAxios();
TypeScript
import axios from 'axios';
async function getUsersWithAxios() {
try {
// .get() возвращает объект ответа, данные находятся в свойстве `data`
const response: { data: User[] } = await axios.get('https://jsonplaceholder.typicode.com/users');
console.log(response.data);
} catch (error) {
console.error('Не удалось получить пользователей:', error.message);
}
}
POST-запрос с помощью axios
axios
автоматически преобразует наш объект в JSON и устанавливает нужные заголовки. Отлично интегрируется с TypeScript, позволяя типизировать и запрос, и ответ.
JavaScript
const axios = require('axios');
async function createPostWithAxios() {
const newPost = {
title: 'foo',
body: 'bar',
userId: 1,
};
try {
// Вторым аргументом передаем данные
const response = await axios.post('https://jsonplaceholder.typicode.com/posts', newPost);
console.log('Пост успешно создан:', response.data);
} catch (error) {
console.error('Не удалось создать пост:', error.message);
}
}
createPostWithAxios();
TypeScript
import axios, { AxiosResponse } from 'axios';
interface Post {
id?: number;
title: string;
body: string;
userId: number;
}
async function createPostWithAxiosTS(): Promise<void> {
const newPost: Post = {
title: 'TypeScript Post',
body: 'This is a test.',
userId: 5,
};
try {
// Указываем тип ожидаемого ответа
const response: AxiosResponse<Post> = await axios.post(
'https://jsonplaceholder.typicode.com/posts',
newPost
);
console.log('Post created successfully:', response.data);
} catch (error) {
if (axios.isAxiosError(error)) {
console.error('Failed to create post:', error.message);
} else {
console.error('An unexpected error occurred:', error);
}
}
}
createPostWithAxiosTS();
// PUT-запрос
await axios.put('https://api.example.com/update/1', { name: 'Bob' });
// DELETE-запрос
await axios.delete('https://api.example.com/delete/1');
Встроенный модуль https (без зависимостей)
Для тех, кто хочет избежать внешних зависимостей, в Node.js есть встроенные модули http
и https
. Они более низкоуровневые и менее удобные, но важно знать об их существовании.
Сделать GET-запрос с помощью встроенного модуля https
не вызывает сложностей, но этот способ требует больше ручной работы, например, для сборки данных из потока.
const https = require('https');
function getUsersWithNativeHttp() {
const options = {
hostname: 'jsonplaceholder.typicode.com',
path: '/users',
method: 'GET',
};
const req = https.request(options, (res) => {
let data = '';
// Данные приходят частями (chunks)
res.on('data', (chunk) => {
data += chunk;
});
// Когда все части получены
res.on('end', () => {
console.log(JSON.parse(data));
});
});
req.on('error', (error) => {
console.error(error);
});
req.end(); // Завершаем запрос
}
getUsersWithNativeHttp();
Что лучше?
Сравнительный анализ популярных HTTP-клиентов в Node.js
Критерий | fetch (Node.js 18+) | axios | Модуль |
---|---|---|---|
Установка | Не требуется (встроен) |
| Не требуется (встроен) |
Простота | ✅ Высокая | ✅ Очень высокая | ❌ Низкая |
JSON | Ручное преобразование ( | ✅ Автоматически | ❌ Ручное преобразование |
Обработка ошибок | Требует проверки | ✅ Встроенная | ❌ Низкоуровневая |
TypeScript | Хорошая поддержка | ✅ Отличная поддержка | Требует ручной типизации |
Лучше всего для | Быстрых скриптов, современных проектов | Большинства проектов | Простых запросов без зависимостей |
Заключение
Для новичков в Node.js Axios является лучшей отправной точкой благодаря своей простоте, отличной документации и удобным функциям. Если вы работаете с современной версией Node.js (18+) и хотите избежать лишних зависимостей, встроенный fetch
— это ваш выбор. Встроенный модуль https
стоит использовать только в тех редких случаях, когда внешние зависимости абсолютно недопустимы.