Routing
Normalnya Routing Gaman itu terletak di folder src/routes/**
jadi semisal anda memakai autoComposeRoutes((route) => {})
itu akan otomatis di register oleh sistem.
contoh jelasnya sebagai berikut
Routes definition
Section titled “Routes definition”composeRoutes()
Section titled “composeRoutes()”disini kita memakai composeRoutes
yang berarti tidak akan otomatis di register ke data routes
jadi anda harus manual meregister ke index.ts
import { composeRoutes } from "@gaman/core"
export default composeRoutes((route) => { route.get('/', (ctx) => { return Res.json({ message: "OK!" }) })})
disini kamu perlu meregister manual routes tadi ke dalam file src/index.ts
import { AppRoutes } from "./routes/AppRoutes.ts"
defineBootstrap((app) => { app.mount(AppRoutes)})
autoComposeRoutes()
Section titled “autoComposeRoutes()”disini kita memakai autoComposeRoutes
yang berarti routes akan otomatis ke register ke data routes
. dengan persyaratan harus berada di folder src/routes/**
import { autoComposeRoutes } from "@gaman/core"
export default autoComposeRoutes((route) => { route.get('/', (ctx) => { return Res.json({ message: "OK!" }) })})
nah setelah itu routes akan otomatis keregister ke data routes
Routing
Section titled “Routing”disini kita akan masuk kedalam management routing di dalam compose tadi yang sudah kita buat
Basic Routing
Section titled “Basic Routing”Routing paling dasar gamanjs, menerima path url dan membuat handler didalam route langsung
export default autoComposeRoutes((route) => { route.get('/', (ctx) => { return Res.json({ message: "OK!" }) })})
Available Router Methods
Section titled “Available Router Methods”disini gaman sudah menyiapkan sortcut method yang common untuk kamu pakai
route.get('/', Handler)route.post('/', Handler)route.put('/', Handler)route.patch('/', Handler)route.delete('/', Handler)route.head('/', Handler)route.options('/', Handler)
suatu hari kamu akan membutuhkan pengaturan lebih terhadap router, disini saya sudah membuatkan utilities tambahan
jika kamu ingin membuat routing untuk beberapa method tertentu kamu bisa pakai match
. atau kamu ingin membuat routing untuk semua method kamu bisa pakai all
.
route.match(['GET', 'POST'], '/', Handler)
route.all('/', Handler)
Parameter
Section titled “Parameter”jika anda ingin membuat path dinamis mungkin Parameter
ini sangat membantu untuk anda contoh nya seperti /player/:name
route.delete('/player/:id/delete', (ctx) => { const { id } = ctx.params; // TODO Delete player return Res.json({message: `Player ${id} deleted.`})})
jika saat anda akses url /player/155/delete
maka { id }
itu isinya 155
Parameter Opsional
Section titled “Parameter Opsional”jika anda ingin membuat parameter opsional itu gampang banget contohnya /player{/:id}/delete
route.delete('/player{/:id}/delete', (ctx) => { const id = ctx.param('id'); if(!id){ return Res.json({message: 'Id harus ada!'}, 400) }
// TODO delete player return Res.json({message: `Player ${id} deleted.`})})
jadi jika anda akses url /player/delete
maka respon akan status: 400
.
Jika anda akses url /player/155/delete
maka respon akan status: 200
Route Handler
Section titled “Route Handler”untuk route handler ada 3 type di gaman ini, kamu bisa memakai salah satunya
Basic Handler
Section titled “Basic Handler”handler ini cocok untuk project yang super simple dan minimalis, atau sedang kepepet deadline, kamu bisa pakai sementara handler seperti berikut.
route.get('/', (ctx) => { return Res.text("OK!")})
Request Handler
Section titled “Request Handler”handler ini juga cocok untuk project sekala kecil yang bisa kamu pakai, dan ini juga kami sarankan ini lebih enak di pakai dari pada yang basic handler
tadi, berikut adalah contoh:
import { RequestHandler } from "@gaman/common"
export const CreateUser: RequestHandler = (ctx) => { return Res.json(ctx.params)}
lalu di AppRoutes.ts
kamu bisa pakai handler tadi.
import { CreateUser } from "AppHandler.ts"
export default autoComposeRoutes((route) => { route.post("/user/create", CreateUser)})
Controller Handler
Section titled “Controller Handler”berikut ini cocok untuk project sekala besar dan kecil, dan code akan tetap clean karna tidak banyak import handler.
import { composeController } from "@gaman/core"
export default composeController(() => ({ HelloWorld(ctx) { return Res.text("❤️ Welcome to Gaman.js") }}))
dan ini untuk routes nya
import AppController from "../controllers/AppController.ts"
export default autoComposeRoutes((route) => { route.get("/", [AppController, 'HelloWorld'])})
sedikit saya jelaskan ada array [controller, functionName]
, jadi array di index pertama itu adalah container controller, dan untuk array di index kedua itu adalah nama function di dalam container controller.
Route Groups
Section titled “Route Groups”route group disini untuk membungkus route route kedalam 1 path
route.group('/user', (route) => {
route.post('/create', Handler); // `/user/create` (POST)
route.get('/profile', Handler) // `/user/profile` (GET)})