Detta dokument har översatts av AI. För eventuella felaktigheter, se den engelska versionen
NocoBase Servers middleware är i grunden Koa middleware. Ni kan hantera förfrågningar och svar genom att manipulera ctx-objektet, precis som i Koa. Men eftersom NocoBase behöver hantera logik på olika affärsnivåer, blir det mycket svårt att underhålla och hantera om all middleware placeras tillsammans.
Därför delar NocoBase in middleware i fyra nivåer:
Middleware på datakällnivå: app.dataSourceManager.use()
Påverkar endast förfrågningar för en specifik datakälla, används ofta för logik som databasanslutningar, fältvalidering eller transaktionshantering för den datakällan.
Middleware på resursnivå: app.resourceManager.use()
Gäller endast för definierade resurser, lämplig för att hantera resursnivålogik, såsom databehörigheter, formatering, etc.
Middleware på behörighetsnivå: app.acl.use()
Körs före behörighetskontroller, används för att verifiera användarbehörigheter eller roller.
Middleware på applikationsnivå: app.use()
Körs för varje förfrågan, lämplig för loggning, allmän felhantering, svarshantering, etc.
Middleware registreras vanligtvis i pluginens load-metod, till exempel:
Middleware körs i följande ordning:
acl.use()resourceManager.use()dataSourceManager.use()app.use()För att få mer flexibel kontroll över middleware-ordningen erbjuder NocoBase parametrarna before, after och tag:
Exempel:
Om ingen position anges är standardexekveringsordningen för nyligen tillagd middleware:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Middleware-exekveringsordningen följer Koas lökringmodell, vilket innebär att de först går in i middleware-stacken och sedan ut ur den.
Exempel på utdataordning vid åtkomst av olika gränssnitt:
Vanlig förfrågan: /api/hello
Utdata: [1,2] (resursen är inte definierad, resourceManager och acl middleware körs inte)
Resursförfrågan: /api/test:list
Utdata: [5,3,7,1,2,8,4,6]
Middleware körs enligt nivåordningen och lökringmodellen.
before / after / tag för att flexibelt styra exekveringsordningen.