Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: middleware, Node.js, Express, request, response, next function

Приходилось ли писать собственное middleware и как это делается?

Вопрос проверяет понимание концепции промежуточного ПО (middleware) в контексте веб-фреймворков, его назначения для обработки запросов и ответов, а также практический опыт его реализации.

Короткий ответ

Middleware — это функция, которая имеет доступ к объектам запроса (req), ответа (res) и следующей функции middleware в цикле обработки приложения (next). В Express.js вы пишете middleware, создавая функцию, которая принимает эти три аргумента. Внутри функции вы выполняете логику (например, логирование, аутентификацию, парсинг тела запроса), а затем вызываете next() для передачи управления следующему middleware или завершаете ответ, отправляя что-то клиенту с помощью res.send(). Собственные middleware позволяют централизованно обрабатывать общие задачи для многих маршрутов.

Длинный ответ

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

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

Каждая функция middleware получает три параметра: объект запроса (req), объект ответа (res) и функцию next. Ключевая идея — middleware может либо модифицировать req и res, либо завершить цикл, отправив ответ, либо передать управление дальше, вызвав next(). Если next() не вызвать, запрос "зависнет".

Практический пример создания Middleware

Допустим, нам нужно логировать метод и URL каждого входящего запроса. Мы создадим функцию и подключим её на уровне приложения, чтобы она работала для всех маршрутов.

// middleware для логирования
const requestLogger = (req, res, next) => {
    const timestamp = new Date().toISOString();
    console.log(`[${timestamp}] ${req.method} ${req.originalUrl}`);
    // Важно: вызываем next() для передачи управления дальше
    next();
};

// Подключение middleware в приложении Express
const express = require('express');
const app = express();

app.use(requestLogger); // Применяется ко всем маршрутам

app.get('/', (req, res) => {
    res.send('Главная страница');
});

app.listen(3000);

Типы и применение Middleware

Middleware можно применять на разных уровнях:

  • На уровне приложения (через app.use()): выполняется для каждого запроса.
  • На уровне маршрута: выполняется только для определённых путей.
  • На уровне роутера: для группировки логики связанных маршрутов.
  • Обработка ошибок: специальный middleware с четырьмя аргументами (err, req, res, next).

Пример middleware для проверки API-ключа только для определённого маршрута:

const apiKeyMiddleware = (req, res, next) => {
    const apiKey = req.headers['x-api-key'];
    if (apiKey === 'secret-key-123') {
        next(); // Ключ верный, продолжаем
    } else {
        res.status(401).json({ error: 'Invalid API Key' }); // Завершаем цикл
    }
};

app.use('/api/admin', apiKeyMiddleware); // Защищаем только маршруты /api/admin/*

Вывод: Собственные middleware стоит писать для любой сквозной функциональности, которую нужно применить к нескольким маршрутам. Это делает код чище, соблюдает принцип DRY (Don't Repeat Yourself) и позволяет легко добавлять или отключать слои обработки, такие как безопасность, мониторинг или подготовка данных.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#middleware

#Node.js

#Express

#request

#response

#next function

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.