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

Швидкий старт

Огляд розробки плагінів
Написання першого плагіна
Структура каталогу проєкту

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

Огляд
Плагін (Plugin)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageПодія (Event)
Next PageСкрипт оновлення (Migration)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#Контекст

У NocoBase кожен запит генерує об'єкт ctx, який є екземпляром Context. Контекст інкапсулює інформацію про запит та відповідь, а також надає специфічні для NocoBase функції, такі як доступ до бази даних, операції кешування, управління дозволами, інтернаціоналізація та ведення журналів.

Application 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 дозволяє зручно обробляти запити, відповіді, дозволи, журнали та базу даних.