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, о них дальше.
- 1 Клиент шлёт запросGET /users/42
- 2 Express находит маршрутСопоставляет метод и путь с app.get/post
- 3 Обработчик (req, res)Читает req, формирует ответ через res
- 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.