Module

x/oak/examples/routingServer.ts

A middleware framework for handling HTTP with Deno 🐿️ 🦕
Extremely Popular
Go to Latest
File
/* * This is an example of a server that utilizes the router. */
// Importing some console colorsimport { green, cyan, bold, yellow,} from "https://deno.land/std@0.51.0/fmt/colors.ts";
import { Application, Context, Router, Status } from "../mod.ts";
interface Book { id: string; title: string; author: string;}
const books = new Map<string, Book>();
books.set("1234", { id: "1234", title: "The Hound of the Baskervilles", author: "Conan Doyle, Author",});
function notFound(context: Context) { context.response.status = Status.NotFound; context.response.body = `<html><body><h1>404 - Not Found</h1><p>Path <code>${context.request.url}</code> not found.`;}
const router = new Router();router .get("/", (context) => { context.response.body = "Hello world!"; }) .get("/book", async (context) => { context.response.body = Array.from(books.values()); }) .get<{ id: string }>("/book/:id", async (context, next) => { if (context.params && books.has(context.params.id)) { context.response.body = books.get(context.params.id); } else { return notFound(context); } });
const app = new Application();
// Loggerapp.use(async (context, next) => { await next(); const rt = context.response.headers.get("X-Response-Time"); console.log( `${green(context.request.method)} ${cyan(context.request.url.pathname)} - ${ bold( String(rt), ) }`, );});
// Response Timeapp.use(async (context, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; context.response.headers.set("X-Response-Time", `${ms}ms`);});
// Use the routerapp.use(router.routes());app.use(router.allowedMethods());
// A basic 404 pageapp.use(notFound);
const options = { hostname: "127.0.0.1", port: 8000 };console.log( bold("Start listening on ") + yellow(`${options.hostname}:${options.port}`),);await app.listen(options);console.log(bold("Finished."));