Middleware
Middleware NocoBase Server pada dasarnya adalah middleware Koa, Anda dapat memanipulasi objek ctx untuk menangani request dan response seperti di Koa. Namun karena NocoBase perlu mengelola logika di berbagai layer bisnis, jika semua middleware ditempatkan di satu tempat, akan sangat sulit dikelola.
Untuk itu, NocoBase membagi middleware menjadi empat level:
-
Middleware level Data Source:
app.dataSourceManager.use()Hanya berlaku untuk request data source tertentu, sering digunakan untuk koneksi database, validasi field, atau pemrosesan transaksi data source tersebut. -
Middleware level Resource:
app.resourceManager.use()Hanya berlaku untuk Resource yang sudah didefinisikan, cocok untuk menangani logika level resource, seperti hak akses data, formatting, dll. -
Middleware level Hak Akses:
app.acl.use()Dieksekusi sebelum penilaian hak akses, digunakan untuk memvalidasi hak akses pengguna atau role. -
Middleware level Aplikasi:
app.use()Akan dieksekusi pada setiap request, cocok untuk pencatatan log, penanganan error umum, pemrosesan response, dll.
Registrasi Middleware
Middleware biasanya didaftarkan pada method load plugin, contohnya:
Urutan Eksekusi
Urutan eksekusi middleware adalah sebagai berikut:
- Pertama eksekusi middleware hak akses yang ditambahkan oleh
acl.use() - Kemudian eksekusi middleware resource yang ditambahkan oleh
resourceManager.use() - Selanjutnya eksekusi middleware data source yang ditambahkan oleh
dataSourceManager.use() - Terakhir eksekusi middleware aplikasi yang ditambahkan oleh
app.use()
Mekanisme Insertion before / after / tag
Untuk mengontrol urutan middleware secara lebih fleksibel, NocoBase menyediakan parameter before, after, dan tag:
- tag: Memberikan tanda pada middleware, untuk dirujuk oleh middleware lainnya
- before: Sisipkan sebelum middleware dengan tag yang ditentukan
- after: Sisipkan setelah middleware dengan tag yang ditentukan
Contoh:
Jika posisi tidak ditentukan, urutan eksekusi default middleware yang baru ditambahkan adalah:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
Contoh Model Onion
Urutan eksekusi middleware mengikuti model onion Koa, yaitu masuk ke stack middleware terlebih dahulu, kemudian keluar terakhir.
Akses API yang berbeda, contoh urutan output:
-
Request biasa:
/api/helloOutput:[1,2](Resource tidak terdefinisi, tidak mengeksekusi middlewareresourceManagerdanacl) -
Request resource:
/api/test:listOutput:[5,3,7,1,2,8,4,6]Middleware dieksekusi sesuai level dan model onion
Ringkasan
- Middleware NocoBase adalah ekstensi dari Middleware Koa
- Empat level: aplikasi -> data source -> resource -> hak akses
- Dapat menggunakan
before/after/taguntuk mengontrol urutan eksekusi dengan fleksibel - Mengikuti model onion Koa, memastikan middleware dapat dikomposisi dan dinested
- Middleware level data source hanya berlaku untuk request data source tertentu, middleware level resource hanya berlaku untuk request resource yang terdefinisi
Tautan Terkait
- Context — Memahami API lengkap objek
ctxdi middleware - ResourceManager Manajemen Resource — Registrasi middleware level resource dan definisi resource
- ACL Kontrol Hak Akses — Penggunaan middleware level hak akses dan logika validasi hak akses
- Plugin — Mendaftarkan middleware dalam method
loadplugin - DataSourceManager Manajemen Data Source — Skenario penggunaan middleware level data source
- Ikhtisar Pengembangan Server — Arsitektur server menyeluruh dan posisi middleware di dalamnya

