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

クイックスタート

プラグイン開発概要
最初のプラグインを作成
プロジェクトディレクトリ構造

サーバーサイド開発

概要
プラグイン
コレクション
データベース操作
データソース管理
リソース管理
ACL権限制御
ミドルウェア
キャッシュ
イベント
リクエストコンテキスト
マイグレーション
ロガー
I18n 国際化
コマンド
定時タスク管理
テスト

クライアントサイド開発

概要
プラグイン
コンテキスト
ルーター
ACL権限制御
データソース管理
リソース
リクエスト
スタイルとテーマ
ロガー
I18n 国際化
テスト

その他

プラグインアップグレードガイド
言語一覧
依存関係の管理
ビルド
Previous Pageイベント
Next Pageマイグレーション
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#コンテキスト

NocoBase では、各リクエストで ctx オブジェクトが生成されます。これは Context のインスタンスです。Context には、リクエストとレスポンスの情報がカプセル化されており、データベースアクセス、キャッシュ操作、権限管理、国際化、ログ記録など、NocoBase 独自の機能も提供されています。

NocoBase の Application は Koa をベースにしているため、ctx は本質的に Koa の Context です。しかし、NocoBase はその上に豊富な API を拡張しており、開発者はミドルウェアやアクションでビジネスロジックを簡単に処理できます。各リクエストは独立した ctx を持つため、リクエスト間のデータ分離と安全性が保証されます。

#ctx.action

ctx.action は、現在のリクエストで実行されているアクションへのアクセスを提供します。以下が含まれます。

  • ctx.action.params
  • ctx.action.actionName
  • ctx.action.resourceName
resourceManager.use(async (ctx) => {
  console.log(ctx.action.actionName); // 現在のアクション名を出力
  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 は、ミドルウェアチェーンでデータを共有するために使用されます。

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 を使用すると、リクエスト、レスポンス、権限、ログ、データベースを簡単に操作できます。