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.