Bu belge AI tarafından çevrilmiştir. Herhangi bir yanlışlık için lütfen İngilizce sürümüne bakın
NocoBase Sunucusu'nun middleware'i temelde bir Koa middleware'idir. Koa'da olduğu gibi ctx nesnesini kullanarak istekleri ve yanıtları işleyebilirsiniz. Ancak NocoBase'in farklı iş katmanlarındaki mantığı yönetmesi gerektiği için, tüm middleware'ler tek bir yerde toplandığında bakımı ve yönetimi oldukça zorlaşır.
Bu nedenle NocoBase, middleware'i dört katmana ayırmıştır:
Veri Kaynağı Düzeyi Middleware: app.dataSourceManager.use()
Yalnızca belirli bir veri kaynağı için gelen istekleri etkiler. Genellikle o veri kaynağının veritabanı bağlantıları, alan doğrulama veya işlem yönetimi gibi mantıklar için kullanılır.
Kaynak Düzeyi Middleware: app.resourceManager.use()
Yalnızca tanımlanmış kaynaklar (Resource) için geçerlidir. Veri izinleri, biçimlendirme vb. gibi kaynak düzeyi mantığını işlemek için uygundur.
İzin Düzeyi Middleware: app.acl.use()
İzin kontrollerinden önce çalışır ve kullanıcı izinlerini veya rollerini doğrulamak için kullanılır.
Uygulama Düzeyi Middleware: app.use()
Her istek için çalışır ve günlük kaydı, genel hata işleme, yanıt işleme vb. gibi durumlar için uygundur.
Middleware genellikle eklentinin load metodunda kaydedilir, örneğin:
Middleware çalışma sırası aşağıdaki gibidir:
acl.use() ile eklenen izin middleware'i çalışır.resourceManager.use() ile eklenen kaynak middleware'i çalışır.dataSourceManager.use() ile eklenen veri kaynağı middleware'i çalışır.app.use() ile eklenen uygulama middleware'i çalışır.Middleware sırasını daha esnek bir şekilde kontrol etmek için NocoBase, before, after ve tag parametrelerini sunar:
tag'e sahip middleware'den önce ekler.tag'e sahip middleware'den sonra ekler.Örnek:
:::ipucu
Eğer bir konum belirtilmezse, yeni eklenen middleware'lerin varsayılan çalışma sırası şöyledir:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
:::
Middleware çalışma sırası, Koa'nın soğan halkası modelini takip eder; yani middleware yığınına önce girer ve en son çıkar.
Farklı arayüzler için çıktı sırası örnekleri:
Normal istek: /api/hello
Çıktı: [1,2] (kaynak tanımlı değil, resourceManager ve acl middleware'leri çalışmaz)
Kaynak isteği: /api/test:list
Çıktı: [5,3,7,1,2,8,4,6]
Middleware, katman sırasına ve soğan halkası modeline göre çalışır.
before / after / tag kullanarak çalışma sırasını esnek bir şekilde kontrol edebilirsiniz.