Пошук уроків, статей та іншого контенту
Створимо HTTP-сервер за допомогою node:http, обробимо запит і сформуємо базову відповідь.
У цьому уроці ми створимо простий HTTP-сервер за допомогою вбудованого модуля node:http.
Сервер буде:
приймати HTTP-запити;
перевіряти адресу запиту;
формувати відповідь;
запускатися на локальному порту.
Для цього не потрібно встановлювати додаткові пакети.
node:httpNode.js має вбудований модуль node:http, який дозволяє створювати HTTP-сервери.
Підключити його можна за допомогою require:
const http = require('node:http');Префікс node: явно вказує, що використовується вбудований модуль Node.js.
Метод http.createServer() створює HTTP-сервер. Він отримує функцію-обробник, яка викликається для кожного запиту.
const http = require('node:http');
const server = http.createServer((request, response) => {
// Обробка запиту
});Функція-обробник отримує два об'єкти:
request — інформація про вхідний запит;
response — об'єкт для формування відповіді клієнту.
Назви параметрів можуть бути іншими, але зазвичай використовують скорочення req і res.
Об'єкт запиту містить дані про те, що саме надіслав клієнт.
Наприклад:
request.methodповертає HTTP-метод запиту, наприклад GET або POST.
Властивість:
request.urlмістить адресу запиту, наприклад / або /about.
Для відповіді використовують об'єкт response.
Метод response.end() завершує відповідь і може одразу передати текст клієнту:
response.end('Привіт від сервера!');Якщо не викликати response.end(), клієнт може чекати на відповідь без завершення.
HTTP-відповідь може містити код статусу та заголовки:
response.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
});У цьому прикладі:
200 означає успішну обробку запиту;
Content-Type описує тип даних у відповіді;
charset=utf-8 дозволяє правильно відображати українські символи.
Після цього відповідь потрібно завершити:
response.end('Сервер працює');Створіть файл server.js:
const http = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((request, response) => {
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
if (request.method === 'GET' && request.url === '/') {
response.statusCode = 200;
response.end('Вітаємо! HTTP-сервер працює.');
return;
}
if (request.method === 'GET' && request.url === '/about') {
response.statusCode = 200;
response.end('Це сторінка про сервер.');
return;
}
response.statusCode = 404;
response.end('Сторінку не знайдено.');
});
server.listen(port, hostname, () => {
console.log(`Сервер запущено: http://${hostname}:${port}`);
});Запустіть сервер командою:
node server.jsУ терміналі з'явиться повідомлення:
Сервер запущено: http://127.0.0.1:3000Відкрийте в браузері такі адреси:
http://127.0.0.1:3000/
http://127.0.0.1:3000/about
http://127.0.0.1:3000/unknown
Для першої адреси сервер поверне привітання, для другої — інформацію про сторінку, а для третьої — повідомлення про помилку.
Зупинити сервер можна комбінацією клавіш Ctrl + C у терміналі.
Спочатку ми визначаємо адресу та порт:
const hostname = '127.0.0.1';
const port = 3000;127.0.0.1 — це локальна адреса комп'ютера. Сервер доступний лише на цьому комп'ютері.
Потім створюємо сервер:
const server = http.createServer((request, response) => {
// Логіка обробки запиту
});Для кожного запиту перевіряємо метод і шлях:
if (request.method === 'GET' && request.url === '/') {
// Обробка GET-запиту до кореневого шляху
}Якщо умова виконується, сервер встановлює код 200 і надсилає відповідь:
response.statusCode = 200;
response.end('Вітаємо! HTTP-сервер працює.');Якщо жоден шлях не підійшов, сервер повертає код 404:
response.statusCode = 404;
response.end('Сторінку не знайдено.');Метод server.listen() запускає сервер і починає прослуховувати вказаний порт:
server.listen(port, hostname, () => {
console.log(`Сервер запущено: http://${hostname}:${port}`);
});Функція всередині listen виконується після успішного запуску сервера.
Працюючий сервер можна перевірити не лише через браузер, а й за допомогою curl:
curl http://127.0.0.1:3000/Очікувана відповідь:
Вітаємо! HTTP-сервер працює.Для перевірки неіснуючого шляху:
curl http://127.0.0.1:3000/unknownСервер поверне:
Сторінку не знайдено.response.end()Якщо обробник запиту не завершує відповідь, клієнт може продовжувати очікування:
const server = http.createServer((request, response) => {
response.write('Відповідь');
// Помилка: відповідь не завершено
});Потрібно викликати response.end():
const server = http.createServer((request, response) => {
response.end('Відповідь');
});Якщо інший процес уже використовує порт 3000, сервер не запуститься.
У такому разі можна змінити порт:
const port = 3001;Або зупинити інший сервер, який працює на цьому порту.
Значення request.url має точно відповідати перевірці:
request.url === '/about'Це не те саме, що:
request.url === '/About'Шляхи можуть відрізнятися регістром символів.
Якщо вказати лише:
response.setHeader('Content-Type', 'text/plain');у деяких випадках українські символи можуть відображатися некоректно. Для тексту краще вказувати кодування:
response.setHeader('Content-Type', 'text/plain; charset=utf-8');У цьому уроці ми:
підключили вбудований модуль node:http;
створили сервер за допомогою http.createServer();
отримали метод і шлях запиту через request;
сформували відповідь через response;
встановили код статусу та заголовок відповіді;
запустили сервер методом server.listen();
обробили неіснуючий шлях кодом 404.
Базова схема HTTP-сервера на Node.js виглядає так:
const http = require('node:http');
const server = http.createServer((request, response) => {
response.statusCode = 200;
response.end('Відповідь сервера');
});
server.listen(3000);