Node.js с нуля: Создаем HTTP-сервер без библиотек

Node.js — самодостаточная платформа для создания небольших серверов, предназначенных для отслеживания URL-адресов, отображения HTML-шаблонов и разработки веб-сайтов. В этом уроке мы рассмотрим создание сервера на Node.js без использования дополнительных библиотек.

Подключение модуля HTTP

Для начала необходимо подключить встроенный модуль http:

const http = require('http');

Существует также модуль https для создания защищённого соединения (протокол HTTPS), но в данном уроке используется более простой протокол HTTP.

Создание и запуск сервера

Создадим сервер с помощью метода createServer и запустим его методом listen:

const http = require('http');
const PORT = 3000;
const HOST = 'localhost'; // Или '127.0.0.1'

const server = http.createServer((request, response) => {
  // Обработка запроса и ответа
});

server.listen(PORT, HOST, () => {
  console.log(`Сервер запущен на ${HOST}:${PORT}`);
});

Метод createServer принимает callback-функцию, которая срабатывает при обработке каждого запроса. Функция получает два параметра: request (запрос пользователя) и response (ответ сервера). Метод listen принимает порт, хост и callback-функцию, выводящую сообщение о запуске сервера в консоль. Для запуска используется команда node index.js (где index.js — имя файла). localhost и 127.0.0.1 — один и тот же адрес локального сервера.

Отправка ответа пользователю

Добавим код для вывода информации пользователю:

server.on('request', (req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('Hello Node.js!');
});

Метод writeHead отправляет заголовки ответа. 200 — статус-код успешного запроса. Content-Type указывает тип содержимого (text/plain — обычный текст, charset=utf-8 — кодировка UTF-8). Метод end завершает ответ и отправляет данные (Hello Node.js!).

Отображение HTML

Для отображения HTML-кода изменим Content-Type и отправим HTML-код:

res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end('<h1>Hello Node.js!</h1>');

Теперь вместо обычного текста отобразится заголовок H1.

Использование внешнего HTML-файла

Для удобства можно использовать отдельный HTML-файл (например, index.html):

const fs = require('fs');

server.on('request', (req, res) => {
    fs.readFile('./index.html', (err, data) => {
        if (err) {
            res.writeHead(500);
            res.end('Error');
        } else {
            res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
            res.end(data);
        }
    });
});

Этот код использует модуль fs для чтения содержимого файла index.html и отправки его как ответ. Обработка ошибок также включена.

В этом уроке мы создали базовый HTTP-сервер на Node.js, научились обрабатывать запросы и отправлять ответы, включая HTML-код. В следующих уроках рассмотрим более сложные аспекты разработки веб-серверов на Node.js.

Что будем искать? Например,программа