Dit document is vertaald door AI. Voor onnauwkeurigheden, raadpleeg de Engelse versie
De middleware van de NocoBase Server is in essentie Koa middleware. U kunt het ctx-object manipuleren om verzoeken en antwoorden af te handelen, net als in Koa. Echter, aangezien NocoBase logica op verschillende bedrijfslagen moet beheren, wordt het erg moeilijk te onderhouden en te beheren als alle middleware bij elkaar wordt geplaatst. Daarom verdeelt NocoBase middleware in vier lagen:
Gegevensbron-niveau middleware: app.dataSourceManager.use()
Heeft alleen invloed op verzoeken voor een specifieke gegevensbron, vaak gebruikt voor databankverbindingen, veldvalidatie of transactieverwerkingslogica voor die gegevensbron.
Resource-niveau middleware: app.resourceManager.use()
Alleen effectief voor gedefinieerde resources, geschikt voor het afhandelen van resource-niveau logica, zoals datarechten, opmaak, enz.
Rechten-niveau middleware: app.acl.use()
Wordt uitgevoerd vóór rechtencontroles en gebruikt om gebruikersrechten of rollen te verifiëren.
Applicatie-niveau middleware: app.use()
Wordt uitgevoerd voor elk verzoek, geschikt voor logging, algemene foutafhandeling, verwerking van antwoorden, enz.
Middleware wordt doorgaans geregistreerd in de load-methode van de plugin, bijvoorbeeld:
De uitvoeringsvolgorde van middleware is als volgt:
acl.use().resourceManager.use().dataSourceManager.use().app.use().Voor een flexibelere controle over de middleware-volgorde biedt NocoBase de parameters before, after en tag:
Voorbeeld:
Als er geen positie is opgegeven, is de standaard uitvoeringsvolgorde voor nieuw toegevoegde middleware:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
De uitvoeringsvolgorde van middleware volgt Koa's uienringmodel, wat betekent dat het eerst de middleware-stack binnengaat en als laatste weer verlaat.
Voorbeelden van uitvoervolgorde bij verschillende interfaces:
Standaard verzoek: /api/hello
Uitvoer: [1,2] (resource niet gedefinieerd, voert resourceManager en acl middleware niet uit)
Resource verzoek: /api/test:list
Uitvoer: [5,3,7,1,2,8,4,6]
Middleware wordt uitgevoerd volgens de lagenvolgorde en het uienringmodel.
before / after / tag gebruiken om de uitvoeringsvolgorde flexibel te beheren.