Базовое понимание http модуля, его назначение и особенности
Node.js → Node.js API → Http
Основная идея
Модуль http — встроенный модуль Node.js для создания HTTP-серверов и выполнения HTTP-запросов. Это низкоуровневый API, на котором построены фреймворки Express, Koa и другие.
Ключевые аспекты
http.createServer() — создание HTTP-сервера
req (IncomingMessage) — объект входящего запроса
res (ServerResponse) — объект ответа сервера
http.request() — выполнение HTTP-запросов как клиент
server.listen() — запуск сервера на порту
Плюсы http модуля
Не требует установки дополнительных пакетов
Полный контроль над запросами и ответами
Основа для понимания работы веб-серверов
Поддержка HTTP/1.1 и keep-alive
Минусы
Низкоуровневый — много boilerplate-кода
Нет встроенного роутинга
Ручной парсинг body запроса
Для продакшна нужны фреймворки
Частые ошибки на собеседованиях
Забывают вызвать res.end() — запрос зависает
Не понимают, что req и res — это потоки (streams)
Путают http и https модули
Введение и проблематика
Модуль http позволяет Node.js работать как веб-сервер, обрабатывая входящие HTTP-запросы. Это фундаментальный модуль, на котором построены все веб-фреймворки Node.js.
Понимание http модуля важно для глубокого понимания работы Express, Koa, Fastify и других фреймворков.
Модуль http работает на основе событий (EventEmitter) и потоков (Streams), что делает его эффективным для обработки множества соединений.
Базовая теория
Основные компоненты
js
consthttp=require('http');// Создание сервераconstserver=http.createServer((req, res) => {// req — IncomingMessage (входящий запрос)// res — ServerResponse (исходящий ответ)res.statusCode =200;res.setHeader('Content-Type','text/plain');res.end('Hello World\n');});// Запуск сервераserver.listen(3000, () => {console.log('Сервер запущен на http://localhost:3000');});
constserver=http.createServer((req, res) => {// Установка статуса и заголовковres.writeHead(200, {'Content-Type':'text/html','X-Custom-Header':'value' });// Запись данных (можно вызывать несколько раз)res.write('<html>');res.write('<body>');res.write('<h1>Hello</h1>');res.write('</body>');res.write('</html>');// Завершение ответа (обязательно!)res.end();});
constserver=http.createServer((req, res) => {res.write('Hello');res.setHeader('X-Custom','value'); // ❌ Error!// Cannot set headers after they are sent});