Express (фреймворк)
Express — серверный веб-фреймворк для платформы Node.js, написанный на JavaScript. Первоначально создан Ти Джеем Холоуэйчуком[1], в настоящее время проект находится под эгидой OpenJS Foundation[2]. Фреймворк предоставляет разработчикам инструменты, упрощающие создание современных веб-приложений и API на базе Node.js[3]. Текущая стабильная версия — 5.1.0[4].
Что важно знать
| Express | |||
|---|---|---|---|
| Тип | Веб-фреймворк | ||
| Автор | Ти Джей Холоуэйчук | ||
| Разработчики | OpenJS Foundation и участники проекта | ||
| Написана на | JavaScript | ||
| Интерфейс | Программный интерфейс (API), командная строка | ||
| Движок | V8 | ||
| Операционная система | кроссплатформенное ПО | ||
| Языки интерфейса | Английский | ||
| Первый выпуск | 16 ноября 2010 | ||
| Аппаратные платформы | x86, x86-64, ARM, PowerPC, IBM Z | ||
| Последняя версия | 5.1.0 (31 марта 2025) | ||
| Репозиторий | github.com/expressjs/exp… | ||
| |||
| |||
| Состояние | активное | ||
| Лицензия | MIT | ||
| Сайт | expressjs.com | ||
История
Фреймворк был создан в 2010 году программистом Ти Джеем Холоуэйчуком, который вдохновлялся минималистичным веб-фреймворком Sinatra для языка Ruby. Первая версия была выпущена 16 ноября 2010 года. В 2014 году права на управление проектом были переданы компании StrongLoop, которую в 2015 году приобрела IBM. В январе 2016 года IBM передала Express.js под управление инкубатора Node.js Foundation. Впоследствии Node.js Foundation объединилась с JS Foundation, в результате чего была образована OpenJS Foundation, под эгидой которой проект находится в настоящее время.
9 сентября 2024 года, после более чем десятилетнего периода разработки, состоялся официальный релиз Express 5.0.0. Этот выпуск стал первым крупным обновлением фреймворка с 2014 года и придал новый импульс развитию проекта[5][6].
Управление проектом
Веб-фреймворк Express.js находится под эгидой OpenJS Foundation и управляется Техническим комитетом (Technical Committee, TC)[7]. Эта команда отвечает за основное развитие, поддержку и принятие ключевых решений по проекту[7]. Проект имеет статус «Impact Project» в рамках OpenJS Foundation, что подчёркивает его высокую значимость для экосистемы JavaScript[8].
В 2024 году были усовершенствованы структуры управления проектом, а сам фреймворк был вновь интегрирован в CITGM (Canary in the Gold Mine) для Node.js для обеспечения лучшей совместимости с экосистемой. Дальнейшее развитие проекта, включая реализацию дорожной карты на 2025 год, осуществляется при поддержке фонда Sovereign Tech Fund (STF)[8].
Согласно официальному сайту, в состав Технического комитета входят[9]:
- Блейк Эмбри (Blake Embrey)
- Рэнд МакКинни (Rand McKinney)
- Линус Уннебэк (Linus Unnebäck)
- Улисес Гаскон (Ulises Gascón)
- Жан Бюреллье (Jean Burellier)
- Уэс Тодд (Wes Todd)
- Джон Чёрч (Jon Church)
- Крис де Алмейда (Chris de Almeida)
Для обеспечения прозрачности процесса разработки Технический комитет проводит регулярные онлайн-встречи, которые открыты для всех желающих, а их записи публикуются на YouTube-канале проекта[9].
Текущее состояние и развитие
По состоянию на 2025 год фреймворк Express.js находится в стадии активного развития. После более чем десятилетнего периода разработки, 9 сентября 2024 года состоялся официальный выпуск стабильной версии Express 5.0.0[10]. Вскоре, 8 октября 2024 года, вышло обновление 5.0.1 для устранения уязвимостей безопасности[10]. Разработка продолжилась и в 2025 году: 31 марта была выпущена версия 5.1.0, которая стала основной в менеджере пакетов npm. Проект активно поддерживается: параллельно с развитием пятой версии продолжают выходить обновления безопасности для ветки 4.x. По состоянию на конец 2025 года у фреймворка нет активных предрелизных версий (альфа, бета или релиз-кандидат), однако команда обсуждает планы по разработке Express 6[11].
Ключевые нововведения в Express 5 включают[12]:
- Требования к окружению: прекращена поддержка устаревших версий Node.js; для работы требуется версия 18 или выше[13][14].
- Асинхронная обработка: встроена нативная поддержка промисов и синтаксиса async/await. Теперь ошибки в асинхронных обработчиках маршрутов и промежуточном ПО (middleware) перехватываются автоматически, без необходимости оборачивать код в блоки `try...catch`[12].
- Маршрутизация: обновлена система сопоставления путей за счёт новой версии зависимости `path-to-regexp`, что привело к изменениям в обработке регулярных выражений[12][15].
- Удаление устаревшего кода: из кодовой базы убраны давно устаревшие методы и свойства для повышения чистоты и безопасности API[12].
- Обработка запросов: изменены некоторые стандартные настройки встроенного обработчика тела запроса (ранее — `body-parser`), например, для `urlencoded` по умолчанию теперь используется опция `extended: false`[10].
Команда разработчиков представила дорожную карту на 2025 год, которая реализуется при поддержке фонда Sovereign Tech Fund (STF). Основные направления развития включают повышение безопасности, производительности и улучшение опыта разработчиков (Developer Experience, DX). Несмотря на появление более производительных альтернатив, Express.js остаётся стандартом де-факто для Node.js и ключевым компонентом стека MERN[16].
Архитектура
Express.js работает на базе платформы Node.js и, соответственно, использует её движок V8, разработанный Google[17]. Приложение на Express обычно состоит как минимум из файла app.js, в котором регистрируются промежуточные обработчики и контроллеры, а также запускается веб-сервер[18].
Клиентскому запросу (HTTP-запрос) в маршрутизаторе может быть назначено один или несколько обработчиков («request handler»). Для назначения обработчиков Express предоставляет специальные инструменты перенаправления[19]. Если для одного запроса назначено несколько обработчиков, они выполняются последовательным образом; каждый из них представляет собой независимый «middleware», не влияющий на остальные. Обработчик запроса принимает три параметра: объект запроса, объект ответа и следующий обработчик этого запроса. Такая модульная архитектура позволяет, например, интегрировать повторяющиеся процессы — такие как логика аутентификации — до выполнения основного запроса[18].
Ключевым архитектурным изменением в Express 5 стала встроенная поддержка промисов и синтаксиса async/await. Теперь ошибки в асинхронных обработчиках маршрутов и промежуточном ПО перехватываются автоматически, что упрощает обработку асинхронных операций.
Фреймворк включает встроенное промежуточное ПО для обработки входящих данных в форматах JSON (с помощью `express.json()`) и `URL-encoded` (с помощью `express.urlencoded()`)[20][21]. Для обработки данных из форм, содержащих файлы (`multipart/form-data`), используются сторонние библиотеки, например Multer. В ответах клиенту Express может генерировать HTML с помощью шаблонизаторов (таких как Pug или EJS), отправлять данные в формате JSON (метод `res.json()`) или отдавать статические файлы[20][22].
Express является серверным фреймворком и не имеет собственного графического интерфейса пользователя (GUI)[23], поскольку предназначен для бэкенд-разработки[24]. Взаимодействие с ним происходит через программный интерфейс (API), который является основным способом работы с фреймворком, и интерфейс командной строки (CLI), используемый для вспомогательных задач, например, для генерации структуры проекта[25][26]. Пользовательский интерфейс создаётся отдельно и взаимодействует с Express одним из способов: фреймворк либо генерирует HTML-страницы на сервере с помощью шаблонизаторов, либо функционирует как REST API для одностраничных приложений (SPA), созданных на таких фреймворках, как Angular, React или Vue.js[27][28].
Хотя сам фреймворк не имеет встроенных языковых настроек, он предоставляет возможности для создания многоязычных приложений с помощью сторонних библиотек для интернационализации (i18n)[29]. Такие инструменты, как `i18next`, позволяют определять язык пользователя и автоматически подставлять переведённые текстовые строки в ответы сервера[30][31].
В соответствии с типичными для JavaScript соглашениями, Express часто используется совместно с NoSQL-базами данных, такими как MongoDB. Наиболее известная комбинация, в рамках которой применяется Express, называется стеком MEAN и включает MongoDB, Express.js, Angular и Node.js. Этот стек остаётся востребованным решением для full-stack разработки, так как позволяет использовать JavaScript (или TypeScript) на всех уровнях приложения — от базы данных до клиентского интерфейса[32][33].
Веб-фреймворк Express.js является кроссплатформенным, поскольку он работает на любой платформе, где может быть запущена среда исполнения Node.js[34]. Совместимость фреймворка с оборудованием и операционными системами напрямую зависит от поддержки, предоставляемой Node.js[35].
Операционные системы Node.js и, соответственно, Express.js поддерживаются на следующих операционных системах:
- Windows: Windows 8.1, Windows Server 2012 R2 и более новые версии.
- macOS: Актуальные версии macOS.
- Linux: Большинство дистрибутивов, включая Red Hat Enterprise Linux и Ubuntu[34][36].
- Другие системы: Поддерживаются также SmartOS, IBM AIX, FreeBSD (экспериментально), OpenBSD и IBM i.
Аппаратные архитектуры Ключевым фактором является архитектура процессора. Поддерживаются следующие архитектуры:
- x86 (32-бит и 64-бит): Наиболее распространённая архитектура для настольных компьютеров и серверов (также известная как amd64 или x86-64 для 64-битных систем)[37].
- ARM (32-бит и 64-бит): Широкий спектр устройств, от одноплатных компьютеров (например, Raspberry Pi) до серверов и ноутбуков Apple с чипами M1/M2 (ARM64)[37][38].
- PowerPC (ppc64le): 64-битная архитектура с порядком байтов от младшего к старшему, используемая в некоторых серверных системах IBM[39].
- IBM Z (s390x): Архитектура мейнфреймов IBM[39].
Таким образом, приложение на Express.js можно запустить как на обычном ноутбуке, так и на сервере в дата-центре, в облачных платформах или на встраиваемых системах[38].
Примеры
Приведённый ниже код создаёт веб-сервер, который прослушивает порт 3000 и отвечает на GET-запрос к корневому маршруту (/) сообщением «Hello World from Express 5!»[40].
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World from Express 5!');
});
app.listen(port, () => {
console.log(`Сервер запущен и работает по адресу http://localhost:${port}`);
});
В Express 5 появилась встроенная поддержка асинхронных обработчиков маршрутов, что позволяет использовать синтаксис async/await без дополнительных обёрток для перехвата ошибок[41]. Пример ниже демонстрирует создание модуля маршрутизации для обработки запросов к /user/:id.
const express = require('express');
const router = express.Router();
// Асинхронная функция, имитирующая запрос к базе данных
const fetchUserFromDB = async (id) => {
return new Promise((resolve, reject) => {
if (id === '1') {
resolve({ id: 1, name: 'John Doe' });
} else {
reject(new Error('Пользователь не найден'));
}
});
};
// Обработчик для GET-запроса с параметром :id.
// В Express 5 ошибки в асинхронных функциях перехватываются автоматически.
router.get('/user/:id', async (req, res) => {
const user = await fetchUserFromDB(req.params.id);
res.json(user);
});
module.exports = router;
Существует множество способов использования middleware в Express. Один из вариантов — привязка нескольких обработчиков к одному клиентскому запросу. Ключевым нововведением в Express 5 стала встроенная поддержка асинхронных функций в качестве промежуточных обработчиков. Это позволяет использовать синтаксис async/await без дополнительных обёрток для перехвата ошибок. Следующий пример демонстрирует асинхронную middleware-функцию и специальную middleware для централизованной обработки ошибок.
// 1. Асинхронная middleware, которая может завершиться ошибкой
const checkAuth = async (req, res, next) => {
// Имитация асинхронной проверки токена
const user = await new Promise((resolve, reject) => {
if (req.query.token === 'secret') {
resolve({ id: 1, role: 'admin' });
} else {
// Отклонение Promise с ошибкой будет автоматически перехвачено Express
reject(new Error('Аутентификация не пройдена'));
}
});
req.user = user; // Сохраняем пользователя в объекте запроса
next(); // Успех, передаем управление следующему обработчику
};
// 2. Применение middleware к маршруту
app.get('/admin/dashboard', checkAuth, (req, res) => {
// Этот код выполнится только при успешной аутентификации
res.send(`Добро пожаловать, пользователь ${req.user.id}!`);
});
// 3. Middleware для обработки ошибок (объявляется после всех маршрутов)
// Имеет 4 аргумента, что отличает её от обычной middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(401).send({ error: err.message });
});
Проекты
Веб-фреймворк Express.js используется многими крупными технологическими компаниями для создания API, веб-приложений и микросервисов[42]. Среди известных компаний и проектов, использующих Express.js в своём технологическом стеке по состоянию на 2025 год:
- Netflix — стриминговый сервис использует Express.js для создания микрофронтендов и в качестве промежуточного слоя (Backend-for-Frontend), который обрабатывает запросы от различных клиентских приложений[43].
- PayPal — глобальная платёжная система применяет Express.js в своей бэкенд-инфраструктуре для создания микросервисов и API[44].
- Uber — сервис использует Express.js в качестве основы для своего базового веб-сервера под названием «Bedrock»[45][46].
- IBM — корпорация использует фреймворк для создания веб-сервисов на своей платформе IBM i и предлагает стартовые наборы для разработки на его основе[47].
- Accenture — международная консалтинговая компания применяет Express.js при разработке проектов для своих клиентов[48].
- Slack — инструмент для корпоративных коммуникаций, построенный на стеке MEAN, который включает Express.js[49].
Несмотря на появление более производительных альтернатив, Express.js остаётся стандартом де-факто для Node.js[50], особенно для создания REST API, микросервисов и одностраничных приложений[51]. Фреймворк также продолжает быть ключевым компонентом популярных стеков, таких как MERN (MongoDB, Express.js, React, Node.js).
Лицензия
Веб-фреймворк Express.js является свободным программным обеспечением с открытым исходным кодом и распространяется под лицензией MIT[52]. Данная разрешительная лицензия накладывает минимальные ограничения на повторное использование, позволяя бесплатно применять, изменять и распространять программное обеспечение, в том числе в коммерческих целях[53].
Литература
- Mastering Web Application Development with Express, ISBN 9781783981083
- Manning: Express.js in Action, ISBN 9781617292422
- Web Development with Node and Express, ISBN 978-1-4919-4930-6
- Express Web Application Development, ISBN 9781849696548
- Node.js Express in Real World: Architect, Build, and Scale Production-Ready Web Apps from Start to Finish (Navanath Jadhav, 2024)[54]
- API with Node.js, Express and Prisma (Gustavo Morales, 2023)[54]
- Node.js, Express, MongoDB и React. 23 урока для начинающих (Владимир Дронов, 2024)
Примечания
Ссылки
- Официальный сайт (на английском)
- Официальный репозиторий на GitHub


