Dokumen ini diterjemahkan oleh AI. Untuk ketidakakuratan apa pun, silakan lihat versi bahasa Inggris
Middleware NocoBase Server pada dasarnya adalah Koa middleware. Anda dapat mengoperasikan objek ctx untuk menangani permintaan dan respons, sama seperti di Koa. Namun, karena NocoBase perlu mengelola logika di berbagai lapisan bisnis, jika semua middleware ditempatkan bersama, akan sangat sulit untuk dipelihara dan dikelola.
Oleh karena itu, NocoBase membagi middleware menjadi empat tingkatan:
Middleware Tingkat Sumber Data: app.dataSourceManager.use()
Hanya berlaku untuk permintaan sumber data tertentu, sering digunakan untuk koneksi database, validasi kolom, atau logika pemrosesan transaksi untuk sumber data tersebut.
Middleware Tingkat Sumber Daya: app.resourceManager.use()
Hanya berlaku untuk sumber daya (Resource) yang telah didefinisikan, cocok untuk menangani logika tingkat sumber daya, seperti izin data, pemformatan, dll.
Middleware Tingkat Izin: app.acl.use()
Dieksekusi sebelum pemeriksaan izin, digunakan untuk memverifikasi izin atau peran pengguna.
Middleware Tingkat Aplikasi: app.use()
Dieksekusi untuk setiap permintaan, cocok untuk pencatatan log, penanganan kesalahan umum, pemrosesan respons, dll.
Middleware biasanya didaftarkan dalam metode load dari plugin, contohnya:
Urutan eksekusi middleware adalah sebagai berikut:
acl.use()resourceManager.use()dataSourceManager.use()app.use()before / after / tagUntuk kontrol urutan middleware yang lebih fleksibel, NocoBase menyediakan parameter before, after, dan tag:
tag yang ditentukan.tag yang ditentukan.Contoh:
Jika posisi tidak ditentukan, urutan eksekusi default untuk middleware yang baru ditambahkan adalah:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Urutan eksekusi middleware mengikuti Model Onion Ring Koa, yaitu masuk ke tumpukan middleware terlebih dahulu, dan keluar terakhir.
Contoh urutan output saat mengakses antarmuka yang berbeda:
Permintaan Biasa: /api/hello
Output: [1,2] (sumber daya tidak terdefinisi, tidak mengeksekusi middleware resourceManager dan acl)
Permintaan Sumber Daya: /api/test:list
Output: [5,3,7,1,2,8,4,6]
Middleware dieksekusi sesuai dengan urutan tingkatan dan model onion ring.
before / after / tag untuk mengontrol urutan eksekusi secara fleksibel