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

Rychlý start

Přehled vývoje pluginů
Vytvoření prvního pluginu
Struktura adresářů projektu

Vývoj na straně serveru

Přehled
Plugin
Kolekce
Databázové operace
Správa zdrojů dat (DataSourceManager)
Správa zdrojů (ResourceManager)
Řízení přístupu (ACL)
Middleware
Cache
Události
Kontext požadavku
Migrace
Protokoly
Internacionalizace (I18n)
Příkazový řádek (Command)
Správa plánovaných úloh (CronJobManager)
Testování

Vývoj na straně klienta

Přehled
Plugin
Kontext
Router
Řízení přístupu (ACL)
Správa zdrojů dat (DataSourceManager)
Zdroje
Požadavky
Styly a motivy
Protokoly
Internacionalizace (I18n)
Testování

Ostatní

Průvodce aktualizací pluginů
Seznam jazyků
Správa závislostí
Sestavení
Previous PageSpráva zdrojů dat (DataSourceManager)
Next PageŘízení přístupu (ACL)
TIP

Tento dokument byl přeložen umělou inteligencí. V případě nepřesností se prosím obraťte na anglickou verzi

#ResourceManager Správa zdrojů

Funkce správy zdrojů v NocoBase dokáže automaticky převádět existující databázové tabulky (kolekce) a asociace na zdroje. Obsahuje vestavěné typy operací, které vývojářům pomáhají rychle vytvářet operace se zdroji REST API. Na rozdíl od tradičních REST API se operace se zdroji v NocoBase nespoléhají na metody HTTP požadavků, ale určují konkrétní operaci k provedení prostřednictvím explicitních definic :action.

#Automatické generování zdrojů

NocoBase automaticky převádí kolekce a asociace definované v databázi na zdroje. Například, pokud definujete dvě kolekce, posts a tags:

db.defineCollection({
  name: 'posts',
  fields: [
    { type: 'belongsToMany', name: 'tags' },
  ],
});

db.defineCollection({
  name: 'tags',
  fields: [],
});

Tím se automaticky vygenerují následující zdroje:

  • posts zdroj
  • tags zdroj
  • posts.tags asociační zdroj

Příklady požadavků:

MetodaCestaOperace
GET/api/posts:listDotaz na seznam
GET/api/posts:get/1Dotaz na jednu položku
POST/api/posts:createPřidat novou
POST/api/posts:update/1Aktualizovat
POST/api/posts:destroy/1Smazat
MetodaCestaOperace
GET/api/tags:listDotaz na seznam
GET/api/tags:get/1Dotaz na jednu položku
POST/api/tags:createPřidat novou
POST/api/tags:update/1Aktualizovat
POST/api/tags:destroy/1Smazat
MetodaCestaOperace
GET/api/posts/1/tags:listDotaz na všechny tagy spojené s postem
GET/api/posts/1/tags:get/1Dotaz na jeden tag pod postem
POST/api/posts/1/tags:createVytvořit jeden tag pod postem
POST/api/posts/1/tags:update/1Aktualizovat jeden tag pod postem
POST/api/posts/1/tags:destroy/1Smazat jeden tag pod postem
POST/api/posts/1/tags:addPřidat spojené tagy k postu
POST/api/posts/1/tags:removeOdebrat spojené tagy od postu
POST/api/posts/1/tags:setNastavit všechny spojené tagy pro post
POST/api/posts/1/tags:togglePřepnout spojení tagů pro post
Tip

Operace se zdroji v NocoBase přímo nezávisí na metodách požadavků, ale určují operace prostřednictvím explicitních definic :action.

#Operace se zdroji

NocoBase nabízí bohaté vestavěné typy operací, které splňují různé obchodní potřeby.

#Základní CRUD operace

Název operacePopisPoužitelné typy zdrojůMetoda požadavkuPříklad cesty
listDotaz na data seznamuVšechnyGET/POST/api/posts:list
getDotaz na jednu položku datVšechnyGET/POST/api/posts:get/1
createVytvořit nový záznamVšechnyPOST/api/posts:create
updateAktualizovat záznamVšechnyPOST/api/posts:update/1
destroySmazat záznamVšechnyPOST/api/posts:destroy/1
firstOrCreateNajít první záznam, vytvořit pokud neexistujeVšechnyPOST/api/users:firstOrCreate
updateOrCreateAktualizovat záznam, vytvořit pokud neexistujeVšechnyPOST/api/users:updateOrCreate

#Relační operace

Název operacePopisPoužitelné typy vztahůPříklad cesty
addPřidat asociacihasMany, belongsToMany/api/posts/1/tags:add
removeOdebrat asociacihasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:remove
setResetovat asociacihasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:set
togglePřidat nebo odebrat asociacibelongsToMany/api/posts/1/tags:toggle

#Parametry operací

Mezi běžné parametry operací patří:

  • filter: Podmínky dotazu
  • values: Hodnoty k nastavení
  • fields: Určení vrácených polí
  • appends: Zahrnout asociovaná data
  • except: Vyloučit pole
  • sort: Pravidla řazení
  • page, pageSize: Parametry stránkování
  • paginate: Zda povolit stránkování
  • tree: Zda vrátit stromovou strukturu
  • whitelist, blacklist: Whitelist/blacklist polí
  • updateAssociationValues: Zda aktualizovat asociované hodnoty

#Vlastní operace se zdroji

NocoBase umožňuje registrovat dodatečné operace pro existující zdroje. Můžete použít registerActionHandlers k přizpůsobení operací pro všechny nebo specifické zdroje.

#Registrace globálních operací

resourceManager.registerActionHandlers({
  customAction: async (ctx) => {
    ctx.body = { resource: ctx.action.resourceName };
  },
});

#Registrace operací pro konkrétní zdroje

resourceManager.registerActionHandlers({
  'posts:publish': async (ctx) => publishPost(ctx),
  'posts.comments:pin': async (ctx) => pinComment(ctx),
});

Příklady požadavků:

POST /api/posts:customAction
POST /api/posts:publish
POST /api/posts/1/comments:pin

Pravidlo pojmenování: resourceName:actionName, při zahrnutí asociací použijte tečkovou syntaxi (posts.comments).

#Vlastní zdroje

Pokud potřebujete poskytovat zdroje, které nesouvisí s kolekcemi, můžete je definovat pomocí metody resourceManager.define:

resourceManager.define({
  name: 'app',
  actions: {
    getInfo: async (ctx) => {
      ctx.body = { version: 'v1' };
    },
  },
});

Metody požadavků jsou konzistentní s automaticky generovanými zdroji:

  • GET /api/app:getInfo
  • POST /api/app:getInfo (standardně podporuje GET/POST)

#Vlastní middleware

Použijte metodu resourceManager.use() k registraci globálního middleware. Například:

Globální logovací middleware

resourceManager.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const duration = Date.now() - start;
  console.log(`${ctx.method} ${ctx.path} - ${duration}ms`);
});

#Speciální vlastnosti Contextu

Možnost vstoupit do middleware nebo akce vrstvy resourceManager znamená, že daný zdroj musí existovat.

#ctx.action

  • ctx.action.actionName: Název operace
  • ctx.action.resourceName: Může být kolekce nebo asociace
  • ctx.action.params: Parametry operace

#ctx.dataSource

Aktuální objekt zdroje dat.

#ctx.getCurrentRepository()

Aktuální objekt repozitáře.

#Jak získat objekty resourceManager pro různé zdroje dat

resourceManager patří ke zdroji dat a operace lze registrovat samostatně pro různé zdroje dat.

#Hlavní zdroj dat

Pro hlavní zdroj dat můžete přímo použít app.resourceManager:

app.resourceManager.registerActionHandlers();

#Ostatní zdroje dat

Pro ostatní zdroje dat můžete získat konkrétní instanci zdroje dat prostřednictvím dataSourceManager a použít resourceManager této instance:

const dataSource = dataSourceManager.get('external');
dataSource.resourceManager.registerActionHandlers();

#Iterace přes všechny zdroje dat

Pokud potřebujete provést stejné operace na všech přidaných zdrojích dat, můžete použít metodu dataSourceManager.afterAddDataSource k iteraci, čímž zajistíte, že resourceManager každého zdroje dat bude moci registrovat odpovídající operace:

dataSourceManager.afterAddDataSource((dataSource) => {
  dataSource.resourceManager.registerActionHandlers();
});