Routing
A fast router built on web standards. Part of @b9g/router.
Router
import { Router } from "@b9g/router";
const router = new Router();
route(pattern: string, options?: RouteOptions): Route
Defines a route. Returns a Route object for chaining HTTP methods.
router.route("/users/:id").get(handler);
router.route("/posts/:id", { name: "post" }).get(handler);
use(middleware: Middleware): void
use(path: string, middleware: Middleware): void
Registers middleware globally or for a path prefix.
router.use(loggingMiddleware);
router.use("/api", authMiddleware);
mount(prefix: string, subrouter: Router): void
Mounts a subrouter at a path prefix.
router.mount("/api/v1", apiRouter);
handle(request: Request): Promise<Response>
Handles a request and returns a response.
const response = await router.handle(request);
match(url: string): RouteMatch | null
Tests if a URL matches any route.
const match = router.match("/users/123");
// { params: { id: "123" }, methods: ["GET"], pattern: "/users/:id" }
url(name: string, params: Record<string, string>): string
Generates a URL from a named route.
router.url("post", { id: "123" }); // "/posts/123"
Route
Returned by router.route(). Chain HTTP methods:
get(handler: Handler): Route
post(handler: Handler): Route
put(handler: Handler): Route
delete(handler: Handler): Route
patch(handler: Handler): Route
head(handler: Handler): Route
options(handler: Handler): Route
router.route("/users/:id")
.get(getUser)
.put(updateUser)
.delete(deleteUser);
Handler
type Handler = (
request: Request,
context: RouteContext
) => Response | Promise<Response>;
RouteContext
interface RouteContext {
params: Record<string, string>;
// Plus properties added by middleware
}
Pattern Syntax
| Pattern | Matches | Example |
|---|---|---|
/users |
Static path | /users |
/users/:id |
Named parameter | /users/123 → { id: "123" } |
/users/:id(\\d+) |
With constraint | /users/123 (not /users/abc) |
/users/:id? |
Optional parameter | /users, /users/123 |
/files/:path+ |
One or more segments | /files/a/b/c |
/files/:path* |
Zero or more segments | /files, /files/a/b |
/files/* |
Wildcard | /files/anything/here |
RouteOptions
| Option | Type | Description |
|---|---|---|
name |
string |
Name for URL generation |
RouteMatch
Returned by router.match():
| Property | Type | Description |
|---|---|---|
params |
Record<string, string> |
Extracted parameters |
methods |
string[] |
Registered HTTP methods |
pattern |
string |
Matched pattern |
name |
string | undefined |
Route name if set |
See Also
- Middleware - Request/response middleware
- ServiceWorker - Event handling