Diese Dokumentation wurde automatisch von KI übersetzt.
Middleware
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-Registrierung
Middleware wird normalerweise in der load-Methode eines Plugins registriert, zum Beispiel:
Ausführungsreihenfolge
Die Ausführungsreihenfolge der Middleware ist wie folgt:
- Zuerst wird die Berechtigungs-Middleware ausgeführt, die mit
acl.use()hinzugefügt wurde. - Danach wird die Ressourcen-Middleware ausgeführt, die mit
resourceManager.use()hinzugefügt wurde. - Anschließend wird die Datenquellen-Middleware ausgeführt, die mit
dataSourceManager.use()hinzugefügt wurde. - Zuletzt wird die Anwendungs-Middleware ausgeführt, die mit
app.use()hinzugefügt wurde.
before / after / tag Einfügemechanismus
Um die Reihenfolge der Middleware flexibler zu steuern, bietet NocoBase die Parameter before, after und tag:
- tag: Weist der Middleware ein Tag zu, das von nachfolgender Middleware referenziert werden kann.
- before: Fügt die Middleware vor der Middleware mit dem angegebenen Tag ein.
- after: Fügt die Middleware nach der Middleware mit dem angegebenen Tag ein.
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()
Beispiel für das Zwiebelschalenmodell
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- undacl-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.
Zusammenfassung
- NocoBase Middleware ist eine Erweiterung der Koa Middleware.
- Vier Ebenen: Anwendung -> Datenquelle -> Ressource -> Berechtigung
- Sie können
before/after/tagverwenden, um die Ausführungsreihenfolge flexibel zu steuern. - Folgt dem Koa-Zwiebelschalenmodell und gewährleistet, dass Middleware zusammensetzbar und verschachtelbar ist.
- Datenquellen-Middleware wirkt sich nur auf Anfragen für bestimmte Datenquellen aus und Ressourcen-Middleware nur auf Anfragen für definierte Ressourcen.

