logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo

Быстрый старт

Обзор разработки плагинов
Создание первого плагина
Структура каталогов проекта

Серверная разработка

Обзор
Плагин
Коллекции (таблицы данных)
Операции с базой данных
Управление источниками данных (DataSourceManager)
Управление ресурсами (ResourceManager)
Контроль доступа (ACL)
Промежуточное ПО (Middleware)
Кэш
Событие
Контекст запроса
Миграции
Логгер
Интернационализация (I18n)
Командная строка
Управление задачами Cron (CronJobManager)
Тестирование

Клиентская разработка

Обзор
Плагин
Контекст
Маршрутизатор
Контроль доступа (ACL)
Управление источниками данных (DataSourceManager)
Ресурс
Запрос
Стили и темы
Логгер
Интернационализация (I18n)
Тестирование

Прочее

Руководство по обновлению плагинов
Список языков
Управление зависимостями
Сборка
Previous PageСобытие
Next PageМиграции
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Контекст

В NocoBase каждый запрос генерирует объект ctx, который является экземпляром Context. ctx инкапсулирует информацию о запросе и ответе, а также предоставляет специфические для NocoBase функции, такие как доступ к базе данных, операции с кэшем, управление правами доступа, интернационализация и логирование.

Приложение NocoBase основано на Koa, поэтому ctx по сути является Koa Context. Однако NocoBase расширяет его богатым набором API, позволяя разработчикам удобно обрабатывать бизнес-логику в Middleware и Action. Каждый запрос имеет независимый ctx, что обеспечивает изоляцию и безопасность данных между запросами.

#ctx.action

ctx.action предоставляет доступ к Action, выполняемому для текущего запроса. Включает:

  • ctx.action.params
  • ctx.action.actionName
  • ctx.action.resourceName
resourceManager.use(async (ctx) => {
  console.log(ctx.action.actionName); // Выводит имя текущего Action
  ctx.body = `Action: ${ctx.action.actionName}`;
});

#ctx.i18n & ctx.t()

Поддержка интернационализации (i18n).

  • ctx.i18n предоставляет информацию о языковой среде
  • ctx.t() используется для перевода строк в зависимости от языка
resourceManager.use(async (ctx) => {
  const msg = ctx.t('Hello World'); // Возвращает перевод в зависимости от языка запроса
  ctx.body = msg;
});

#ctx.db

ctx.db предоставляет интерфейс для доступа к базе данных, позволяя напрямую работать с моделями и выполнять запросы.

resourceManager.use(async (ctx) => {
  const users = await ctx.db.getRepository('users').find();
  ctx.body = users;
});

#ctx.cache

ctx.cache предоставляет операции кэширования, поддерживая чтение и запись в кэш. Обычно используется для ускорения доступа к данным или сохранения временного состояния.

resourceManager.use(async (ctx) => {
  await ctx.cache.set('key', 'value', 60); // Кэшировать на 60 секунд
  const val = await ctx.cache.get('key');
  ctx.body = val;
});

#ctx.app

ctx.app — это экземпляр приложения NocoBase, который предоставляет доступ к глобальной конфигурации, плагинам и сервисам.

resourceManager.use(async (ctx) => {
  console.log(ctx.app);
  ctx.body = 'Check console for app';
});

#ctx.auth.user

ctx.auth.user получает информацию о текущем аутентифицированном пользователе, что удобно для проверок прав доступа или использования в бизнес-логике.

resourceManager.use(async (ctx) => {
  if (!ctx.auth.user) {
    ctx.throw(401, 'Unauthorized');
  }
  ctx.body = `Hello ${ctx.auth.user.username}`;
});

#ctx.state.currentRoles

ctx.state используется для обмена данными в цепочке middleware.

resourceManager.use(async (ctx) => {
  ctx.body = `Current User: ${ctx.state.currentRoles.join(',')}`;
});

#ctx.logger

ctx.logger предоставляет возможности логирования, поддерживая вывод логов различных уровней.

resourceManager.use(async (ctx) => {
  ctx.logger.info('Processing request for:', ctx.path);
  ctx.body = 'Logged successfully';
});

#ctx.permission & ctx.can()

ctx.permission используется для управления правами доступа, а ctx.can() — для проверки наличия у текущего пользователя разрешения на выполнение определенной операции.

resourceManager.use(async (ctx) => {
  const canEdit = await ctx.can('edit', 'posts');
  if (!canEdit) {
    ctx.throw(403, 'Forbidden');
  }
  ctx.body = 'You have permission to edit posts';
});

#Краткое изложение

  • Каждый запрос соответствует независимому объекту ctx.
  • ctx является расширением Koa Context, объединяющим функциональность NocoBase.
  • Общие свойства включают: ctx.db, ctx.cache, ctx.auth, ctx.state, ctx.logger, ctx.can(), ctx.t() и другие.
  • Использование ctx в Middleware и Action позволяет удобно обрабатывать запросы, ответы, права доступа, логи и базу данных.