Как создать веб‑сервер на Node.js и Express.js
Кратко
Краткое руководство по созданию простого веб‑сервера на Node.js с использованием Express.js. Показываю установку, минимальный код server.js, тестирование локально, варианты альтернатив и базовые рекомендации по безопасности и развёртыванию.

Node.js стал одним из самых популярных решений для серверной разработки за последние годы. Он позволяет запускать JavaScript вне браузера — в командной строке и на серверах. Express.js — лёгкий веб‑фреймворк для Node.js, который упрощает работу с маршрутизацией и middleware. В этой статье пошагово разберём, как создать и запустить простой веб‑сервер, какие есть альтернативы и что учесть при тестировании и развёртывании.
Технологии и пакеты
Node.js — это runtime для JavaScript на базе движка V8 от Chrome. npm (Node Package Manager) управляет пакетами и зависимостями. Express.js — минималистичный фреймворк, который строится поверх встроенного модуля http и даёт упрощённый API для маршрутов и middleware.
Ключевые понятия (одна строка):
- Node.js — выполняет JavaScript вне браузера.
- npm — менеджер пакетов для установки библиотек.
- Express.js — фреймворк для создания серверов и маршрутов.
Важно: Express.js не обязателен — можно использовать чистый модуль http, но Express ускоряет разработку.
Как начать: структура и установка
- Создайте папку проекта и перейдите в неё:
mkdir my-node-server
cd my-node-server- Инициализируйте пакет npm (создаст package.json):
npm init -y- Установите Express.js:
npm install expressПосле установки откройте папку в вашем редакторе и создайте файл server.js.
Простой server.js — минимальный рабочий пример
Создайте файл server.js и вставьте следующий код. Он показывает корневой маршрут и динамический маршрут по имени:
const express = require('express');
const app = express();
// Корневой маршрут
app.get('/', (req, res) => {
res.send('Hello World
');
});
// Динамический маршрут: /имя
app.get('/:name', (req, res) => {
res.send(`Welcome to ${req.params.name}!
`);
});
// Запуск сервера на порту 5000
app.listen(5000, () => console.log('Server is running on port 5000'));Пояснения по коду:
- express() создаёт приложение Express.
- app.get(path, handler) регистрирует обработчик для GET‑запросов.
- req.params — параметры маршрута (для /:name это поле name).
- res.send() отправляет текст или HTML в ответ.
- app.listen(port, callback) начинает прослушивание порта.
Запуск и тестирование локально
Чтобы запустить сервер, выполните в каталоге проекта:
node server.jsВы увидите сообщение в консоли, если всё прошло успешно.
Откройте в браузере http://localhost:5000 — вы увидите ответ корневого маршрута.
Перейдите по адресу http://localhost:5000/muo — и увидите динамический маршрут с именем muo.
Чтобы остановить сервер, нажмите Ctrl+C (Windows/Linux) или Cmd+C (macOS).
Развитие проекта: что можно добавить дальше
- Обработка других HTTP‑методов: app.post(), app.put(), app.delete().
- Парсинг тела запроса: npm install body-parser или встроенный express.json().
- Статические файлы: app.use(express.static(‘public’)).
- Шаблонизаторы: EJS, Pug, Handlebars для генерации HTML на сервере.
Альтернативы и когда их выбирать
- Встроенный модуль http (node): когда нужен минимальный footprint и контроль на низком уровне. Простой пример:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from native http');
});
server.listen(5000);- Fastify: лучше подходит для высокопроизводительных сервисов с низкой задержкой.
- Koa: более современный, использует async/await и middleware как асинхронные цепочки.
Когда не нужен Express: в маленьких демонстрациях или мик‑утилитах без маршрутизации и middleware.
Ментальные модели (как думать о сервере)
- Маршрутизация как сопоставление путей → обработчиков.
- Middleware как конвейер: каждый middleware получает req, res и может передать дальше.
- Состояние сервера — не храните чувствительные или изменяемые данные в памяти приложения; используйте внешние хранилища (БД, кеш).
Мини‑методология разработки (шаблон действий)
- Инициировать проект (npm init).
- Установить зависимости (express и необходимые middleware).
- Создать минимальный server.js и убедиться, что сервер запустился.
- Добавить маршруты и юнит‑тесты для ключевых обработчиков.
- Подготовить конфигурацию для окружений (env‑переменные).
- Настроить процесс‑менеджер (pm2) и reverse proxy (nginx) для продакшена.
Чеклист ролей (Developer / DevOps)
Developer:
- Написать читаемые маршруты и middleware.
- Добавить логирование ошибок.
- Написать тесты для основных маршрутов.
DevOps:
- Настроить переменные окружения и secrets.
- Настроить process manager (pm2, systemd).
- Настроить обратный прокси (nginx) и SSL.
Критерии приёмки
- Сервер запускается командой node server.js и отвечает на GET / со статусом 200.
- Динамический маршрут /:name возвращает корректный HTML с указанным именем.
- Логи ошибок записываются в файл или систему логирования.
- Конфиденциальные данные не хранится в исходниках (используются env).
Отладка и тестовые команды
Проверка базовой доступности с помощью curl:
curl -i http://localhost:5000/
curl -i http://localhost:5000/vasyaЕсли порт занят, используйте другой порт или найдите процесс:
lsof -i :5000
kill Безопасность и базовые рекомендации по харднингу
- Не возвращайте стеки ошибок в ответах клиенту.
- Используйте helmet для заголовков безопасности: npm install helmet и app.use(require(‘helmet’)()).
- Ограничьте число запросов (rate limiting) для предотвращения DDoS.
- Валидация входных данных — критична для предотвращения инъекций.
- Храните секреты в переменных окружения, используйте менеджеры секретов в продакшене.
Развёртывание — краткая дорожная карта
- Подготовьте package.json с командой запуска (например, “start”: “node server.js”).
- Используйте process manager (pm2 или systemd) для перезапуска при сбоях.
- Настройте nginx как reverse proxy и SSL (Let’s Encrypt).
- Настройте CI/CD для автоматического тестирования и деплоя.
Совместимость и миграция версий
- Работайте на поддерживаемой LTS‑версии Node.js. Новые версии меняют поведение некоторых API.
- Перед обновлением Node проверяйте зависимости в package.json и их совместимость.
Типичные ошибки и как их исправить
- «Error: Cannot find module ‘express’» — убедитесь, что вы установили пакет и запускаете сервер в каталоге проекта.
- Сервер не отвечает — проверьте, что вы запустили node server.js, и что порт не занят другим процессом.
- Не видны изменения в коде — в разработке используйте nodemon для автоперезапуска: npm install -g nodemon и запуск nodemon server.js.
Краткое резюме
Node.js + Express.js — быстрый способ сделать рабочий HTTP‑сервер. Начните с простого server.js, затем добавляйте маршруты, middleware, тесты и настройки безопасности. Для продакшена используйте process manager и обратный прокси.
Важно: выбирайте инструмент под задачу — для максимальной производительности рассмотрите Fastify или пишите на чистом http, если нужен низкоуровневый контроль.
Полезные команды и шаблоны (cheatsheet)
- Инициализация: npm init -y
- Установка express: npm install express
- Запуск: node server.js или nodemon server.js
- Перезапуск при сбое: pm2 start server.js –name my-app
Если нужно, могу подготовить готовый шаблон проекта с пакетом package.json, настройкой nodemon и примером nginx-конфига для быстрого развёртывания.
Похожие материалы
Как изменить иконку Windows Forms приложения
Как включить моно звук в Windows и VLC
Windows в неподдерживаемом каталоге — решения
Желтый треугольник на диске Windows — причины и исправление
Исключить папки из поиска Windows