Express с нуля: первый сервер за 10 минут

Содержание

О проверке кода. Примеры не запускались в этой сессии (по договорённости — фокус на контенте, а не прогонах). Говорим прямо, а не ставим бейдж «проверено».

Express — самый популярный веб-фреймворк Node.js и точка входа в серверную веб-разработку для большинства. Он превращает низкоуровневую возню с HTTP в несколько понятных строк. Начнём с нуля.

Зачем Express, а не встроенный http

Node умеет поднять сервер встроенным модулем http, но там всё вручную: разобрать URL, определить маршрут, распарсить тело запроса, выставить заголовки. На реальном приложении это горы однообразного кода.

Express берёт рутину на себя: удобные маршруты, разбор тела, отправка JSON одной строкой, middleware. Вы пишете бизнес-логику, а не инфраструктуру. Именно поэтому он стал стандартом.

Установка и первый сервер

npm init -y
npm install express
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Привет, мир!');
});

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

Три шага: создать приложение express(), описать маршруты, запустить app.listen. Всё — рабочий сервер готов. app.get('/', ...) говорит «на GET-запрос к корню ответь этим». Функция-обработчик получает два объекта — req и res, о них дальше.

Жизнь запроса в Express
  1. 1 Клиент шлёт запросGET /users/42
  2. 2 Express находит маршрутСопоставляет метод и путь с app.get/post
  3. 3 Обработчик (req, res)Читает req, формирует ответ через res
  4. 4 res.json / res.sendОтвет уходит клиенту

req и res

Каждый обработчик получает пару объектов:

app.get('/users/:id', (req, res) => {
  req.params.id;        // '42' — параметр из пути /users/:id
  req.query.sort;       // из строки запроса ?sort=name
  req.body;             // тело запроса (для POST, нужен express.json())
  req.headers;          // заголовки

  res.status(200);      // код ответа
  res.json({ id: req.params.id, name: 'Аня' });   // отправить JSON
});
  • req (request) — всё, что прислал клиент: params (из пути), query (из ?...), body (тело), headers;
  • res (response) — методы отправки ответа: res.json() для JSON, res.send() для текста/HTML, res.status() для кода, res.redirect() для перенаправления.

Ответ обязательно нужно отправить (res.json, res.send и т.п.) — иначе запрос «зависнет», клиент будет ждать. Это частая ошибка новичков.

Маршруты и параметры

app.get('/products', (req, res) => { /* список */ });
app.get('/products/:id', (req, res) => {   // :id — параметр пути
  res.json({ id: req.params.id });
});
app.post('/products', (req, res) => { /* создать */ });
app.put('/products/:id', (req, res) => { /* обновить */ });
app.delete('/products/:id', (req, res) => { /* удалить */ });

Маршрут — это метод HTTP + путь. app.get, app.post, app.put, app.delete отвечают на соответствующие методы. :id в пути — параметр, доступный через req.params.id. Это основа маршрутизации, которую разберём подробнее отдельно.

Приём JSON от клиента

app.use(express.json());   // ВКЛЮЧИТЬ разбор JSON-тела — обязательно!

app.post('/users', (req, res) => {
  const { name, email } = req.body;   // теперь req.body доступен
  res.status(201).json({ created: name });
});

Чтобы читать JSON из тела запроса, нужна строка app.use(express.json()). Без неё req.body будет undefined — очень частая причина «почему не приходят данные». Это встроенный middleware, который парсит JSON-тело. Аналогично express.urlencoded() для данных форм.

Отдача статики

app.use(express.static('public'));   // файлы из папки public доступны напрямую
// теперь public/style.css → http://localhost:3000/style.css

Одна строка раздаёт статические файлы (HTML, CSS, картинки) из папки. Удобно для простых сайтов и ассетов.

Актуален ли Express

Честный вопрос — появились быстрые альтернативы (Fastify и другие). Но Express остаётся стандартом де-факто: гигантская экосистема middleware и плагинов, стабильность, простота, тонны документации и примеров. Для большинства проектов это по-прежнему верный выбор — а знание Express переносится и на другие фреймворки, которые во многом на него равняются.

Дальше по теме: маршрутизация подробно, middleware — сердце Express, построение REST API и обработка ошибок.


Смежные темы: встроенный http-сервер — что Express упрощает; маршрутизация; middleware; REST API. Полный список — в уроках Node.js.

Частые вопросы

Что такое Express?
Минималистичный веб-фреймворк для Node.js, который упрощает создание серверов и API. Он берёт на себя рутину — маршрутизацию, разбор запросов, отправку ответов — оставляя вам бизнес-логику. Остаётся самым популярным фреймворком в экосистеме Node.
Зачем Express, если есть встроенный http?
Встроенный модуль http низкоуровневый: маршруты, разбор тела запроса и параметров приходится писать вручную. Express даёт это из коробки — удобные маршруты, middleware, отправку JSON одной строкой. Код получается короче и понятнее.
Как создать сервер на Express?
Установить пакет express, создать приложение через express(), описать маршруты методами app.get и app.post, затем запустить прослушивание порта через app.listen. Минимальный сервер умещается в несколько строк.
Что такое req и res в Express?
req — объект запроса с данными от клиента: параметры, тело, заголовки. res — объект ответа с методами для отправки данных: res.json для JSON, res.send для текста, res.status для кода ответа. Каждый обработчик получает эту пару.
Актуален ли Express в 2026 году?
Да, Express остаётся стандартом де-факто и самым используемым фреймворком Node. Появились быстрые альтернативы вроде Fastify, но огромная экосистема, стабильность и простота удерживают Express в лидерах для большинства проектов.