Skip to main content

Deploy Route

Version Build status issues Deno version License
deno.land nest.land

Experimental routing module for deno deploy 🦕

⚠️ Work In Progress! Expect breaking changes!

Usage

import { Context, Router } from "https://deno.land/x/deploy_route/mod.ts";

const router = new Router()
  .use(async (event, next) => {
    const time = Date.now();
    await next();
    console.log(
      "[%s] %s %o +%sms",
      event.request.method,
      event.request.url,
      event.params,
      Date.now() - time,
    );
  })
  .get<{ foo: string }>("/hello/world/:foo", async (event) => {
    await event.respondWith(
      new Response(`Hello ${event.params.foo}!\n`, {
        headers: { "content-type": "text/plain" },
      }),
    );
  })
  .get("(.*)", async (event) => {
    await event.respondWith(
      new Response("Not found!\n", {
        headers: { "content-type": "text/plain" },
        status: 404,
      }),
    );
  });

addEventListener("fetch", async (event) => {
  await router.dispatch(new Context(event));
});

Nested Routers

const router1 = new Router();
const router2 = new Router();

router1.use("/foo/:bar", router2.routes());

router2.get<{ bar: string; baz: string }>("/:baz", async (event) => {
  await event.respondWith(
    new Response(`bar: ${event.params.bar}, baz: ${event.params.baz}\n`, {
      headers: { "content-type": "text/plain" },
    }),
  );
});

addEventListener("fetch", async (event) => {
  await router.dispatch(new Context(event));
});