Эта документация была автоматически переведена ИИ.
Middleware
Промежуточное ПО (Middleware) сервера NocoBase по своей сути является Koa middleware. Вы можете работать с объектом ctx для обработки запросов и ответов, как и в Koa. Однако, поскольку NocoBase необходимо управлять логикой на различных бизнес-уровнях, если все middleware будут размещены вместе, это значительно усложнит их поддержку и управление.
Поэтому NocoBase разделяет middleware на четыре уровня:
-
Middleware уровня источника данных:
app.dataSourceManager.use()
Применяется только к запросам для конкретного источника данных, обычно используется для логики подключения к базе данных, валидации полей или обработки транзакций для этого источника данных. -
Middleware уровня ресурса:
app.resourceManager.use()
Действует только для определённых ресурсов (Resource) и подходит для обработки логики на уровне ресурсов, такой как права доступа к данным, форматирование и т.д. -
Middleware уровня разрешений:
app.acl.use()
Выполняется до проверки разрешений и используется для в ерификации прав пользователя или ролей. -
Middleware уровня приложения:
app.use()
Выполняется для каждого запроса и подходит для логирования, общей обработки ошибок, обработки ответов и т.д.
Регистрация Middleware
Middleware обычно регистрируется в методе load плагина, например:
Порядок выполнения
Порядок выполнения middleware следующий:
- Сначала выполняется middleware разрешений, добавленное через
acl.use(). - Затем выполняется middleware ресурса, добавленное через
resourceManager.use(). - Затем выполняется middleware источника данных, добавленное через
dataSourceManager.use(). - И наконец, выполняется middleware уровня приложения, добавленное через
app.use().
Механизм вставки с before, after и tag
Для более гибкого управления порядком middleware NocoBase предоставляет параметры before, after и tag:
- tag: Присваивает middleware метку, которая может быть использована последующими middleware.
- before: Вставляет middleware перед тем, которое имеет указанную метку (tag).
- after: Вставляет middleware после того, которое имеет указанную метку (tag).
Пример:
Если позиция не указана, новое middleware по умолчанию выполняется в следующем порядке:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Пример модели «луковицы»
Порядок выполнения middleware следует модели «луковицы» Koa: сначала middleware входят в стек, а затем выходят из него.
Примеры порядка вывода при доступе к различным интерфейсам:
-
Обычный запрос:
/api/hello
Вывод:[1,2](ресурс не определён, middlewareresourceManagerиaclне выполняются). -
Запрос ресурса:
/api/test:list
Вывод:[5,3,7,1,2,8,4,6]
Middleware выполняется в соответствии с иерархией уровней и моделью «луковицы».
Краткий обзор
- Middleware NocoBase — это расширение Koa Middleware.
- Четыре уровня: Приложение -> Источник данных -> Ресурс -> Разрешения.
- Вы можете использовать
before/after/tagдля гибкого управления порядком выполнения. - Следует модели «луковицы» Koa, обеспечивая компонуемость и вложенность middleware.
- Middleware уровня источника данных действует только на запросы к указанному источнику данных, а middleware уровня ресурса — только на запросы к определённым ресурсам.

