static files

Тема дорожной карты · Node.js

Express.js предоставляет встроенный middleware express.static() для раздачи статических файлов — HTML, CSS, JavaScript-бандлов, изображений и шрифтов — непосредственно из серверного приложения Node.js без отдельного веб-сервера. Регистрация app.use(express.static('public')) указывает Express.js раздавать файлы из директории public, автоматически делая public/logo.png доступным по адресу http://localhost:3000/logo.png. Можно зарегистрировать несколько статических директорий через последовательные вызовы app.use(express.static(...)) — Express.js ищет файл в них в порядке регистрации и отдаёт первое совпадение. Для продакшн-развёртываний Node.js express.static() следует настроить с параметрами управления кэшем (maxAge, etag, lastModified), чтобы браузеры и CDN-серверы могли эффективно кэшировать статику, снижая нагрузку на сервер. Когда приложение Node.js находится за обратным прокси вроде Nginx, зачастую эффективнее позволить Nginx раздавать статические ресурсы и оставить серверную часть на Express.js исключительно для обработки API-запросов и динамического контента.

Как это работает

static files — самый широко используемый Node HTTP-фреймворк: минималистичный, middleware-based, route-based. Запрос проходит через стек middleware-функций; каждая зовёт next() для передачи управления. app.get("/path", handler) регистрирует роут; app.use(middleware) монтирует middleware. Современные альтернативы: Fastify (быстрее, schema-based, JSON-first), Koa (духовный преемник Express, async-native), Hono (edge-runtime ready), NestJS (opinionated, decorator-based).

Когда применять

Express — для legacy-сервисов и быстрых прототипов; его доки и middleware-экосистема непревзойдены. Fastify — для новых performance-чувствительных API (2-3x throughput, встроенная schema-валидация). NestJS — для больших командных проектов с пользой от конвенций. Всегда добавляйте helmet, rate-limit, лимит размера body — у Express нет безопасных дефолтов. Валидируйте input (zod, ajv) до любой записи в БД.

Типичные ошибки

Ловушки static files: забытый response — запрос висит вечно (ставьте timeouts); express.json({limit: "100mb"}) (DoS-вектор); нет глобального error-handler (app.use((err, req, res, next) => ...)); не выставлен app.disable("x-powered-by") (fingerprinting); баги в порядке middleware (auth должен быть до handler). Прочтите Express security best practices один раз.

Связанные понятия

Полезные ресурсы