Middlewares
Normalnya Middleware Gaman itu terletak di folder src/middlewares/**
jadi semisal anda memakai autoComposeMiddleware((ctx, next) => next())
itu akan otomatis di register oleh sistem.
Middleware disini berperan sebagai guard sistem request, middleware akan di jalankan pertama kali saat request masuk, jadi sebelum interceptor
lalu handler
, middleware
akan di jalankan terlebih dahulu.
Middleware definition
Section titled “Middleware definition”composeMiddleware()
Section titled “composeMiddleware()”disini kita memakai composeMiddleware
yang berarti tidak akan otomatis di register ke data middlewares
jadi anda harus manual meregister ke index.ts
import { composeMiddleware } from "@gaman/core"
export default composeMiddleware((ctx, next) => { return next()});
setelah itu anda harus meregister manual ke file src/index.ts
import { AppMiddleware } from "./middlewares/AppMiddleware.ts"import { AuthMiddleware } from "./middlewares/AuthMiddleware.ts"
defineBootstrap((app) => { app.mount(AppMiddleware());
})
atau bisa di register ke dalam router tertentu berikut adalah contohnya:
import { AppMiddleware } from "./middlewares/AppMiddleware.ts"import { AuthMiddleware } from "./middlewares/AuthMiddleware.ts"
export default autoComposeRoutes((route) => { route .get('/generate-token', Handler) .middleware(AppMiddleware()) // single middleware .middleware([AppMiddleware(), AuthMiddleware()]) // multi middleware
route.group('/user', (route) => { route.post('/create', Handler) route.get('/profile', Handler) }).middleware(AppMiddleware()) // single middleware .middleware([AppMiddleware(), AuthMiddleware()]) // multi middleware})
jika anda menaruh middleware ke group maka routes di dalamnya akan terkena efeknya juga
autoComposeMiddleware()
Section titled “autoComposeMiddleware()”disini kita memakai autoComposeMiddleware
yang berarti akan otomatis di register ke data middlewares
dengan persyaratan harus berada di folder src/middlewares/**
import { autoComposeMiddleware } from "@gaman/core"
export default autoComposeMiddleware((ctx, next) => { return next();})
ini akan otomatis di register ke dalam data middlewares
jadi anda tidak perlu register manual.
Middleware Config
Section titled “Middleware Config”disini gaman sudah menyiapkan default config bawaan middleware yang bisa kamu pakai
Priority
Section titled “Priority”priority
adalah config yang sangat berguna untuk semakin tinggal prioritas nya maka proses akan di jalankan lebih awal dari yang lain
import { Priority } from "@gaman/common"
export default composeMiddleware((ctx, next) => { return next();}, { priority: Priority.NORMAL})
Includes
Section titled “Includes”includes
disini iyalah berfungsi untuk ngefilter route atau path mana, yang mau menjalankan middleware
export default composeMiddleware((ctx, next) => { return next()}, { inclues: [ { path: '/user{/*splat}' // artinya path /user dan setelahnya akan kena middleware }, { path: '/blog/*splat' // artinya setelah path /blog/ akan middleware kecuali path /blog sendiri method: ['GET', "POST"] // jadi kusus method GET dan POST doang }, "/dashboard" // path /dashboard akan kena middleware ]})
Excludes
Section titled “Excludes”excludes
disini iyalah berfungsi untuk ngefilter route atau path mana, yang tidak akan menjalankan middleware
export default composeMiddleware((ctx, next) => { return next()}, { excludes: [ { path: '/profile{/*splat}' // artinya path /profile dan setelahnya tidak akan kena middleware }, { path: '/setting/*splat' // artinya setelah path /setting/ tidak akan middleware kecuali path /setting sendiri method: ['GET', "POST"] }, "/" // path root tidak akan kena middleware ]})
Config Middleware juga bisa anda setting saat meregister ke dalam route, tetapi hanya composeMiddleware
tidak dengan autoComposeMiddleware
karna itu dah otomatis jadi global middleware.
Contoh:
defineBootstrap((app) => { app.mount(AppMiddleware({ priority: Priority.HIGH, includes: ['/dashboard'] }))})// AppRoutes.tscomposeRoutes((route) => { route.get('/', Handler).middleware(AppMiddleware({ excludes: [{ path: '/api/*splat' }] }))})