Cette documentation a été traduite automatiquement par IA.
Le middleware du serveur NocoBase est, par essence, un middleware Koa. Vous pouvez manipuler l'objet ctx pour traiter les requêtes et les réponses, exactement comme vous le feriez avec Koa. Cependant, NocoBase doit gérer la logique de différentes couches métier. Si tous les middlewares étaient regroupés, leur maintenance et leur gestion deviendraient très complexes.
C'est pourquoi NocoBase a structuré le middleware en quatre niveaux distincts :
Middleware de niveau source de données : app.dataSourceManager.use()
Ce middleware s'applique uniquement aux requêtes d'une source de données spécifique. Il est couramment utilisé pour gérer la connexion à la base de données, la validation des champs ou la logique de traitement des transactions pour cette source de données.
Middleware de niveau ressource : app.resourceManager.use()
Il n'est actif que pour les ressources (Resource) que vous avez définies et convient parfaitement pour gérer la logique spécifique aux ressources, telle que les permissions d'accès aux données ou le formatage.
Middleware de niveau permission : app.acl.use()
Ce middleware s'exécute avant toute vérification de permission. Il sert à valider les permissions ou les rôles des utilisateurs.
Middleware de niveau application : app.use()
Il s'exécute pour chaque requête et est idéal pour des tâches telles que la journalisation (logging), la gestion générale des erreurs ou le traitement des réponses.
Vous enregistrez généralement le middleware dans la méthode load de votre plugin, par exemple :
Voici l'ordre d'exécution des middlewares :
acl.use()resourceManager.use()dataSourceManager.use()app.use()Pour vous offrir un contrôle plus flexible sur l'ordre d'exécution des middlewares, NocoBase met à votre disposition les paramètres before, after et tag :
Exemple :
Si vous ne spécifiez pas de position, l'ordre d'exécution par défaut pour les middlewares nouvellement ajoutés est le suivant :
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
L'ordre d'exécution du middleware suit le modèle en oignon de Koa : les middlewares entrent dans la pile les uns après les autres, puis en sortent dans l'ordre inverse.
Voici des exemples de séquences de sortie pour différentes requêtes :
Requête standard : /api/hello
Sortie : [1,2] (La ressource n'étant pas définie, les middlewares resourceManager et acl ne sont pas exécutés.)
Requête de ressource : /api/test:list
Sortie : [5,3,7,1,2,8,4,6]
Ici, les middlewares s'exécutent selon l'ordre des couches et le modèle en oignon.
before, after et tag pour contrôler l'ordre d'exécution de manière flexible.