Diese Dokumentation wurde automatisch von KI übersetzt.
Die Middleware des NocoBase Servers ist im Wesentlichen Koa Middleware. Sie können das ctx-Objekt wie in Koa manipulieren, um Anfragen und Antworten zu verarbeiten. Da NocoBase jedoch Logik auf verschiedenen Geschäftsebenen verwalten muss, wäre es sehr schwierig, alle Middleware-Komponenten zusammen zu warten und zu verwalten.
Aus diesem Grund teilt NocoBase die Middleware in vier Ebenen auf:
Datenquellen-Middleware: app.dataSourceManager.use()
Wirkt sich nur auf Anfragen einer bestimmten Datenquelle aus und wird häufig für die Datenbankverbindung, Feldvalidierung oder Transaktionsverarbeitung dieser Datenquelle verwendet.
Ressourcen-Middleware: app.resourceManager.use()
Gilt nur für definierte Ressourcen (Resource) und eignet sich zur Verarbeitung von Logik auf Ressourcenebene, wie Datenberechtigungen, Formatierung usw.
Berechtigungs-Middleware: app.acl.use()
Wird vor der Berechtigungsprüfung ausgeführt und dient zur Überprüfung von Benutzerberechtigungen oder Rollen.
Anwendungs-Middleware: app.use()
Wird bei jeder Anfrage ausgeführt und eignet sich für Protokollierung, allgemeine Fehlerbehandlung, Antwortverarbeitung usw.
Middleware wird normalerweise in der load-Methode eines Plugins registriert, zum Beispiel:
Die Ausführungsreihenfolge der Middleware ist wie folgt:
acl.use() hinzugefügt wurde.resourceManager.use() hinzugefügt wurde.dataSourceManager.use() hinzugefügt wurde.app.use() hinzugefügt wurde.before / after / tag EinfügemechanismusUm die Reihenfolge der Middleware flexibler zu steuern, bietet NocoBase die Parameter before, after und tag:
Beispiel:
Wenn keine Position angegeben wird, ist die Standard-Ausführungsreihenfolge für neu hinzugefügte Middleware:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Die Ausführungsreihenfolge der Middleware folgt dem Zwiebelschalenmodell von Koa, was bedeutet, dass sie zuerst in den Middleware-Stack eintritt und zuletzt wieder austritt.
Beim Zugriff auf verschiedene Schnittstellen, Beispiele für die Ausgabereihenfolge:
Reguläre Anfrage: /api/hello
Ausgabe: [1,2] (Ressource nicht definiert, resourceManager- und acl-Middleware werden nicht ausgeführt)
Ressourcenanfrage: /api/test:list
Ausgabe: [5,3,7,1,2,8,4,6]
Die Middleware wird gemäß der Ebenenreihenfolge und dem Zwiebelschalenmodell ausgeführt.
before / after / tag verwenden, um die Ausführungsreihenfolge flexibel zu steuern.