Основы сервера на NodeJS

NodeJS позволяет создавать серверы без внешних зависимостей — с помощью встроенного модуля http.

Создание сервера

Для запуска сервера импортируем модуль http и вызываем createServer(), который принимает функцию обработчика запросов:

const http = require('http');

const server = http.createServer((req, res) => {
  // req — объект запроса от клиента
  // res — объект ответа, который мы отправляем обратно
});

server.listen(3000, () => {
  console.log('Сервер запущен на http://localhost:3000');
});

Запускаем скрипт — сервер ждёт подключений на порту 3000.

Обработка запроса: req и res

Каждый раз, когда браузер или приложение делает запрос (например, открывает http://localhost:3000), вызывается функция-обработчик. В неё передаются два объекта:

  • req — запрос от клиента. Содержит URL, метод (GET/POST), заголовки.
  • res — ответ, который сервер отправляет обратно. Используется для отправки данных и установки статуса.

Отправка ответа

Чтобы ответить клиенту, используем методы res.writeHead() и res.end().

  • res.writeHead(statusCode, headers) — устанавливает статус и заголовки ответа.
  • res.end(content) — отправляет тело ответа и завершает соединение.

Пример: отправка текста:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World');
});

server.listen(3000, () => {
  console.log('Сервер запущен на http://localhost:3000');
});

Что происходит:

  1. Клиент заходит на http://localhost:3000
  2. Сервер получает запрос
  3. Отправляет заголовок: статус 200 (OK), тип содержимого — текст
  4. Отправляет тело: "Hello World"
  5. Закрывает соединение

Открываем браузер — видим просто текст: Hello World.

Важно: если не вызвать res.end(), соединение останется висеть — клиент будет ждать ответа "бесконечно".

Также важно указывать Content-Type. Без него браузер может неправильно интерпретировать ответ (например, отправить JSON как текст, и он не распарсится).

Пример с JSON:

res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Привет', status: 'ok' }));

Это — основа любого сервера на NodeJS. Всё, что сложнее (маршрутизация, файлы, API), строится на этих же принципах.