Перейти до основного вмісту

Простий http сервер

Сьогодні Node.js використовується у багатьох областях, але його початкова мета була надання послуг веб-сервера.

У порівнянні з налаштуванням сервера Apache, NGINX або іншого веб-сервера, налаштування веб-сервера в Node дуже проста. Вбудований модуль http (і його аналог модуль https для захищеного з'єднання) надає метод createServer, який створює простий веб-сервер.

Примітка

Але варто зазначити, що NGINX це reverse proxy сервер, і він зазвичай використовується разом з Node.js додатком, а не як його альтернатива

Все, що потрібно зробити - це вказати функцію зворотного виклику, яка буде обробляти вхідні запити. Запускається сервер викликом методу listen та вказівкою номер порту, на якому сервер чекатиме запити до себе:

const http = require('docs/additional_materials/simple-web-server/http');
const port = 3000;

const server = http.createServer((req, res) => {
res.end('Hello world!');
});

server.listen(port, () => {
console.log(`Сервер чекає на з'єднання на порті: ${port}`);
});

З міркувань безпеки та налагодження зазвичай використовуються порти вище 1024 і вибирають такі номери, як 3000, 8000, 3030 та 8080, оскільки їх легше запам'ятати Якщо ви збережете цей код у файл server.js і запустите скрипт у консолі

node server.js

то вбивши в адресному рядку браузера адресу http://localhost:3000/, ви побачите рядок 'Hello world!' .Зупинити виконання скрипту можна комбінацією Ctrl+C у терміналі

Як бачимо в основі веб-сервера Node, лежить функція зворотного виклику і саме вона обробляє всі запити. Їй передається два аргументи: об'єкт IncomingMessage - змінна req та об'єкт ServerResponse - змінна res. Об'єкт IncomingMessage містить всю інформацію про НТТР-запит: який URL затребуваний, всі надіслані заголовки, всі надіслані в тілі дані і т.д. Об'єкт ServerResponse містить властивості та методи для управління відповіддю, який надсилається назад клієнту (зазвичай браузеру). Об'єкт ServerResponse реалізує інтерфейс потоку запису, що визначає те, як саме дані пересилаються клієнту.