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

Avvio Rapido

Panoramica Sviluppo Plugin
Scrivere il Primo Plugin
Struttura Directory Progetto

Sviluppo Server-side

Panoramica
Plugin
Collezioni (Tabelle Dati)
Operazioni Database
Gestione Origini Dati (DataSourceManager)
Gestione Risorse (ResourceManager)
Controllo Accessi (ACL)
Middleware
Cache
Eventi
Contesto Richiesta
Script di Migrazione
Logger
Internazionalizzazione (I18n)
Comando
Gestione Cron Job
Test

Sviluppo Client-side

Panoramica
Plugin
Contesto
Router
Controllo Accessi (ACL)
Gestione Origini Dati (DataSourceManager)
Risorse
Richieste
Stili e Temi
Logger
Internazionalizzazione (I18n)
Test

Altro

Guida all'Aggiornamento Plugin
Elenco Lingue
Gestione Dipendenze
Build
Previous PageEventi
Next PageScript di Migrazione
Avviso di traduzione IA

Questa documentazione è stata tradotta automaticamente dall'IA.

#Contesto

In NocoBase, ogni richiesta genera un oggetto ctx, che è un'istanza di Context. Il Context incapsula le informazioni della richiesta e della risposta, fornendo al contempo funzionalità specifiche di NocoBase, come l'accesso al database, le operazioni di cache, la gestione dei permessi, l'internazionalizzazione e la registrazione dei log.

L'Application di NocoBase è basata su Koa, quindi ctx è essenzialmente un Koa Context. Tuttavia, NocoBase lo estende con ricche API, consentendo agli sviluppatori di gestire comodamente la logica di business nei Middleware e negli Action. Ogni richiesta ha un ctx indipendente, garantendo l'isolamento e la sicurezza dei dati tra le richieste.

#ctx.action

ctx.action fornisce l'accesso all'Action in esecuzione per la richiesta corrente. Include:

  • ctx.action.params
  • ctx.action.actionName
  • ctx.action.resourceName
resourceManager.use(async (ctx) => {
  console.log(ctx.action.actionName); // Stampa il nome dell'Action corrente
  ctx.body = `Action: ${ctx.action.actionName}`;
});

#ctx.i18n & ctx.t()

Supporto all'internazionalizzazione (i18n).

  • ctx.i18n fornisce le informazioni sulla lingua e la localizzazione
  • ctx.t() viene utilizzato per tradurre le stringhe in base alla lingua
resourceManager.use(async (ctx) => {
  const msg = ctx.t('Hello World'); // Restituisce la traduzione in base alla lingua della richiesta
  ctx.body = msg;
});

#ctx.db

ctx.db fornisce un'interfaccia per l'accesso al database, consentendovi di operare direttamente sui modelli ed eseguire query.

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

#ctx.cache

ctx.cache fornisce operazioni di cache, supportando la lettura e la scrittura nella cache, comunemente utilizzato per accelerare l'accesso ai dati o salvare stati temporanei.

resourceManager.use(async (ctx) => {
  await ctx.cache.set('key', 'value', 60); // Memorizza nella cache per 60 secondi
  const val = await ctx.cache.get('key');
  ctx.body = val;
});

#ctx.app

ctx.app è l'istanza dell'applicazione NocoBase, che consente di accedere alla configurazione globale, ai plugin e ai servizi.

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

#ctx.auth.user

ctx.auth.user recupera le informazioni dell'utente attualmente autenticato, adatto per l'uso nei controlli di permesso o nella logica di business.

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

#ctx.state.currentRoles

ctx.state viene utilizzato per condividere dati nella catena di middleware.

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

#ctx.logger

ctx.logger fornisce capacità di registrazione dei log, supportando l'output di log a più livelli.

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

#ctx.permission & ctx.can()

ctx.permission viene utilizzato per la gestione dei permessi, mentre ctx.can() serve a verificare se l'utente corrente ha il permesso di eseguire una determinata operazione.

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';
});

#Riepilogo

  • Ogni richiesta corrisponde a un oggetto ctx indipendente
  • ctx è un'estensione di Koa Context, che integra le funzionalità di NocoBase
  • Le proprietà comuni includono: ctx.db, ctx.cache, ctx.auth, ctx.state, ctx.logger, ctx.can(), ctx.t(), ecc.
  • L'utilizzo di ctx nei Middleware e negli Action consente di gestire comodamente richieste, risposte, permessi, log e il database.