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

Snabbstart

Översikt: Plugin-utveckling
Skriv ditt första plugin
Projektets katalogstruktur

Server-side-utveckling

Översikt
Plugin
Collections (datatabeller)
Database (databasåtgärder)
DataSourceManager (datakällshantering)
ResourceManager (resurshantering)
ACL (behörighetskontroll)
Middleware
Cache
Event (händelser)
Context (request-kontext)
Migration (uppgraderingsskript)
Logger (loggar)
I18n (internationalisering)
Command (kommandorad)
CronJobManager (schemalagda jobb)
Test (tester)

Klient-side-utveckling

Översikt
Plugin
Context (kontext)
Router (routing)
ACL (behörighetskontroll)
DataSourceManager (datakällshantering)
Resource (resurser)
Request (förfrågningar)
Stilar & teman
Logger (loggar)
I18n (internationalisering)
Test (tester)

Övrigt

Plugin-uppgraderingsguide
Språklista
Beroendehantering
Bygga
Previous PageDataSourceManager (datakällshantering)
Next PageACL (behörighetskontroll)
TIP

Detta dokument har översatts av AI. För eventuella felaktigheter, se den engelska versionen

#Resurshanteraren

NocoBase:s resurshanteringsfunktion kan automatiskt omvandla befintliga datatabeller (samlingar) och associationer till resurser, och har inbyggda operationstyper som hjälper utvecklare att snabbt bygga REST API-resursoperationer. Till skillnad från traditionella REST API:er förlitar sig NocoBase:s resursoperationer inte på HTTP-förfrågningsmetoder, utan bestämmer den specifika operationen som ska utföras genom att explicit definiera :action.

#Automatisk resursgenerering

NocoBase omvandlar automatiskt samlingar och associationer som definieras i databasen till resurser. Till exempel, om ni definierar två samlingar, posts och tags:

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

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

Detta kommer automatiskt att generera följande resurser:

  • posts-resurs
  • tags-resurs
  • posts.tags-associationsresurs

Exempel på förfrågningar:

FörfrågningsmetodSökvägOperation
GET/api/posts:listHämta lista
GET/api/posts:get/1Hämta enstaka
POST/api/posts:createSkapa ny
POST/api/posts:update/1Uppdatera
POST/api/posts:destroy/1Radera
FörfrågningsmetodSökvägOperation
GET/api/tags:listHämta lista
GET/api/tags:get/1Hämta enstaka
POST/api/tags:createSkapa ny
POST/api/tags:update/1Uppdatera
POST/api/tags:destroy/1Radera
FörfrågningsmetodSökvägOperation
GET/api/posts/1/tags:listHämta alla tags associerade med ett post
GET/api/posts/1/tags:get/1Hämta en enstaka tag under ett post
POST/api/posts/1/tags:createSkapa en enstaka tag under ett post
POST/api/posts/1/tags:update/1Uppdatera en enstaka tag under ett post
POST/api/posts/1/tags:destroy/1Radera en enstaka tag under ett post
POST/api/posts/1/tags:addLägg till associerade tags till ett post
POST/api/posts/1/tags:removeTa bort associerade tags från ett post
POST/api/posts/1/tags:setStäll in alla associerade tags för ett post
POST/api/posts/1/tags:toggleVäxla tags-association för ett post
Tips

NocoBase:s resursoperationer är inte direkt beroende av förfrågningsmetoder, utan bestämmer operationer genom explicita :action-definitioner.

#Resursoperationer

NocoBase tillhandahåller ett brett utbud av inbyggda operationstyper för att möta olika affärsbehov.

#Grundläggande CRUD-operationer

OperationsnamnBeskrivningTillämpliga resurstyperFörfrågningsmetodExempel på sökväg
listHämta listdataAllaGET/POST/api/posts:list
getHämta enstaka dataAllaGET/POST/api/posts:get/1
createSkapa ny postAllaPOST/api/posts:create
updateUppdatera postAllaPOST/api/posts:update/1
destroyRadera postAllaPOST/api/posts:destroy/1
firstOrCreateHitta första posten, skapa om den inte finnsAllaPOST/api/users:firstOrCreate
updateOrCreateUppdatera post, skapa om den inte finnsAllaPOST/api/users:updateOrCreate

#Relationsoperationer

OperationsnamnBeskrivningTillämpliga relationstyperExempel på sökväg
addLägg till associationhasMany, belongsToMany/api/posts/1/tags:add
removeTa bort associationhasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:remove
setÅterställ associationhasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:set
toggleLägg till eller ta bort associationbelongsToMany/api/posts/1/tags:toggle

#Operationsparametrar

Vanliga operationsparametrar inkluderar:

  • filter: Sökfilter
  • values: Värden att ställa in
  • fields: Ange fält som ska returneras
  • appends: Inkludera associerad data
  • except: Exkludera fält
  • sort: Sorteringsregler
  • page, pageSize: Pagineringparametrar
  • paginate: Om paginering ska aktiveras
  • tree: Om trädstruktur ska returneras
  • whitelist, blacklist: Vitlista/svartlista för fält
  • updateAssociationValues: Om associerade värden ska uppdateras

#Anpassade resursoperationer

NocoBase tillåter registrering av ytterligare operationer för befintliga resurser. Ni kan använda registerActionHandlers för att anpassa operationer för alla eller specifika resurser.

#Registrera globala operationer

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

#Registrera resursspecifika operationer

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

Exempel på förfrågningar:

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

Namngivningsregel: resourceName:actionName, använd punktnotation (posts.comments) när associationer inkluderas.

#Anpassade resurser

Om ni behöver tillhandahålla resurser som är oberoende av samlingar, kan ni använda metoden resourceManager.define för att definiera dem:

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

Förfrågningsmetoderna överensstämmer med automatiskt genererade resurser:

  • GET /api/app:getInfo
  • POST /api/app:getInfo (stöder GET/POST som standard)

#Anpassade mellanprogram

Använd metoden resourceManager.use() för att registrera globala mellanprogram. Till exempel:

Globalt loggningsmellanprogram

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

#Specifika Context-egenskaper

Att kunna komma åt mellanprogram eller åtgärder på resourceManager-nivån innebär att resursen måste existera.

#ctx.action

  • ctx.action.actionName: Operationsnamn
  • ctx.action.resourceName: Kan vara en samling eller association
  • ctx.action.params: Operationsparametrar

#ctx.dataSource

Det aktuella datakälleobjektet.

#ctx.getCurrentRepository()

Det aktuella repository-objektet.

#Hur man hämtar resourceManager-objekt för olika datakällor

resourceManager tillhör en datakälla, och operationer kan registreras separat för olika datakällor.

#Huvuddatakälla

För huvuddatakällan kan ni direkt använda app.resourceManager för operationer:

app.resourceManager.registerActionHandlers();

#Andra datakällor

För andra datakällor kan ni hämta en specifik datakälleinstans via dataSourceManager och använda den instansens resourceManager för operationer:

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

#Iterera över alla datakällor

Om ni behöver utföra samma operationer på alla tillagda datakällor, kan ni använda metoden dataSourceManager.afterAddDataSource för att iterera, vilket säkerställer att varje datakällas resourceManager kan registrera de motsvarande operationerna:

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