Основы сервера на 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');
});
Что происходит:
- Клиент заходит на
http://localhost:3000 - Сервер получает запрос
- Отправляет заголовок: статус 200 (OK), тип содержимого — текст
- Отправляет тело:
"Hello World" - Закрывает соединение
Открываем браузер — видим просто текст: Hello World.
Важно: если не вызвать
res.end(), соединение останется висеть — клиент будет ждать ответа "бесконечно".
Также важно указывать
Content-Type. Без него браузер может неправильно интерпретировать ответ (например, отправить JSON как текст, и он не распарсится).
Пример с JSON:
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Привет', status: 'ok' }));
Это — основа любого сервера на NodeJS. Всё, что сложнее (маршрутизация, файлы, API), строится на этих же принципах.