Middleware Dasar
Penjelasan
Middleware Echo bertipe echo.MiddlewareFunc — fungsi yang MEMBUNGKUS echo.HandlerFunc berikutnya (disebut next), dijalankan SEBELUM (dan bisa juga sesudah) handler utama. Didaftarkan global lewat e.Use(), atau per-route sebagai argumen tambahan di pendaftaran route.
Contoh Konsep
func CekUmur(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
umur, _ := strconv.Atoi(c.QueryParam("umur"))
if umur < 18 {
return c.String(http.StatusForbidden, "Akses ditolak, umur minimal 18 tahun")
}
return next(c) // lanjut ke handler berikutnya
}
}
e.GET("/dewasa", func(c echo.Context) error {
return c.String(http.StatusOK, "Selamat datang!")
}, CekUmur)
Praktikum
Buat middleware CekJamKerja yang menolak akses (403) kalau jam sekarang (time.Now().Hour()) di luar rentang 8-17, dan memanggil next(c) kalau masih dalam jam kerja. Pasangkan ke route GET /admin.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Middleware Echo berbentuk HIGHER-ORDER FUNCTION (fungsi yang mengembalikan fungsi) — beda dari pola middleware Express.js yang menerima (req, res, next) sebagai tiga argumen terpisah, Echo membungkus next SEBAGAI PARAMETER FUNGSI LUAR, baru fungsi dalamnya yang jadi handler sesungguhnya.