Какой подход к обработке запросов использует Express.js?

«Какой подход к обработке запросов использует Express.js?» — вопрос из категории Express, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Express.js использует middleware-based подход. Каждый HTTP-запрос проходит через цепочку функций промежуточной обработки (middleware), которые выполняются последовательно в порядке их регистрации.

Ключевые моменты:

  • Middleware имеет доступ к объектам запроса (req), ответа (res) и функции next() для передачи управления следующему обработчику.
  • Он может выполнять любую операцию: логирование, парсинг тела запроса, аутентификацию, отправку ответа.
  • Порядок регистрации через app.use() и методы маршрутизации (app.get(), app.post()) критически важен.

Пример базового сервера:

const express = require('express');
const app = express();

// Middleware для логирования (выполняется для всех запросов)
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // Передаем управление дальше
});

// Middleware для парсинга JSON-тел запросов
app.use(express.json());

// Конечный обработчик маршрута
app.get('/api/users', (req, res) => {
  res.json([{ id: 1, name: 'John' }]);
});

// Middleware для обработки 404 ошибок (регистрируется последним)
app.use((req, res) => {
  res.status(404).send('Not Found');
});

app.listen(3000);

Такой подход обеспечивает гибкость, модульность и возможность повторного использования кода.