Routing

Shovel uses a fast, standards-based router. Define routes and handlers to respond to HTTP requests.

Basic Routes

import { Router } from "@b9g/router";

const router = new Router();

// Static routes
router.route("/").get(() => new Response("Home"));
router.route("/about").get(() => new Response("About"));

// Route parameters
router.route("/users/:id").get((request, context) => {
  return Response.json({ id: context.params.id });
});

self.addEventListener("fetch", (event) => {
  event.respondWith(router.handle(event.request));
});

HTTP Methods

Chain multiple methods on a route:

router
  .route("/users/:id")
  .get(getUser)
  .put(updateUser)
  .delete(deleteUser);

Reading Request Data

router.route("/users").post(async (request) => {
  const body = await request.json();
  return Response.json({ received: body });
});

Returning Responses

// JSON
return Response.json({ message: "Hello" });

// HTML
return new Response("<h1>Hello</h1>", {
  headers: { "Content-Type": "text/html" },
});

// Redirect
return Response.redirect("/new-path", 301);

Next Steps