Server Core

Routing

Panduan lengkap sistem routing di BlizzardTS. 🗺️

🗺️ Routing

Routing adalah jantung dari aplikasi web. BlizzardTS menggunakan Radix Tree Router yang sangat cepat untuk mencocokkan URL dengan handler yang tepat.

Basic Routing

BlizzardTS mendukung semua HTTP method standar: get, post, put, delete, patch, dll.

app.get("/posts", (c) => c.text("List Posts"));
app.post("/posts", (c) => c.text("Create Post"));
app.put("/posts", (c) => c.text("Update Post"));
app.delete("/posts", (c) => c.text("Delete Post"));

Path Parameters

Kamu bisa menangkap nilai dinamis dari URL menggunakan syntax :param.

app.get("/users/:id", (c) => {
  const id = c.req.params.id;
  return c.json({ userId: id });
});

// Multiple parameters
app.get("/search", (c) => {
  const query = c.req.query("q"); // "blizzard"
  const page = c.req.query("page"); // "1"
  
  return c.json({ result: `Searching for ${query} on page ${page}` });
});

Wildcards

Gunakan * untuk mencocokkan segala sesuatu. Sangat berguna untuk serve static files atau catch-all route.

// Cocok dengan /files/image.png, /files/docs/readme.pdf, dll
app.get("/files/*", (c) => {
  return c.text(`Accessing file: ${c.req.path}`);
});

Route Grouping & Modularisasi

Untuk aplikasi besar, jangan tulis semua route di satu file. Pisahkan berdasarkan fitur.

1. Buat file route terpisah (misal src/routes/users.ts)

import { Blizzard } from "blizzardts";

export const userRoutes = (app: Blizzard) => {
  app.get("/users", (c) => c.json([]));
  app.post("/users", (c) => c.json({ created: true }));
};

2. Daftarkan di src/index.ts

import { Blizzard } from "blizzardts";
import { userRoutes } from "./routes/users";

const app = Blizzard();

userRoutes(app); // Register routes

export default handle(app);

404 Not Found

Secara default, BlizzardTS akan mengembalikan 404 jika route tidak ditemukan. Kamu bisa kustomisasi ini (tunggu update fitur notFound handler!).

Saat ini, kamu bisa menggunakan wildcard di akhir deklarasi route sebagai fallback:

app.get("*", (c) => {
  return c.status(404).json({ error: "Route not found" });
});