Tento dokument byl přeložen umělou inteligencí. V případě nepřesností se prosím obraťte na anglickou verzi
Middleware NocoBase Serveru je v podstatě Koa middleware. Můžete pracovat s objektem ctx a zpracovávat požadavky a odpovědi stejně jako v Koa. Protože však NocoBase potřebuje spravovat logiku na různých obchodních vrstvách, bylo by velmi obtížné udržovat a spravovat všechna middleware, kdyby byla umístěna pohromadě.
Z tohoto důvodu NocoBase rozděluje middleware do čtyř úrovní:
Middleware na úrovni zdroje dat: app.dataSourceManager.use()
Působí pouze na požadavky pro konkrétní zdroj dat, často se používá pro logiku připojení k databázi, validaci polí nebo zpracování transakcí pro daný zdroj dat.
Middleware na úrovni zdrojů: app.resourceManager.use()
Je účinné pouze pro definované zdroje (Resource), hodí se pro zpracování logiky na úrovni zdrojů, jako jsou datová oprávnění, formátování apod.
Middleware na úrovni oprávnění: app.acl.use()
Spouští se před kontrolou oprávnění, slouží k ověření uživatelských oprávnění nebo rolí.
Middleware na úrovni aplikace: app.use()
Spouští se pro každý požadavek, hodí se pro logování, obecné zpracování chyb, zpracování odpovědí atd.
Middleware se obvykle registruje v metodě load pluginu, například:
Pořadí spouštění middleware je následující:
acl.use().resourceManager.use().dataSourceManager.use().app.use().before / after / tagPro flexibilnější kontrolu pořadí middleware poskytuje NocoBase parametry before, after a tag:
Příklad:
Pokud není specifikována pozice, výchozí pořadí spouštění nově přidaného middleware je:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Pořadí spouštění middleware se řídí cibulovým modelem Koa, což znamená, že middleware nejprve vstupuje do zásobníku a nakonec ze zásobníku vystupuje.
Příklady výstupu pro různá rozhraní:
Běžný požadavek: /api/hello
Výstup: [1,2] (zdroj není definován, nespouští se middleware resourceManager a acl)
Požadavek na zdroj: /api/test:list
Výstup: [5,3,7,1,2,8,4,6]
Middleware se spouští podle pořadí úrovní a cibulového modelu.
before / after / tag.