Skip to main content
Module

x/oak/examples/staticServer.ts

A middleware framework for handling HTTP with Deno 🐿️ 🦕
Extremely Popular
Go to Latest
File
import { green, cyan, bold, yellow, red} from "https://deno.land/std@v0.16.0/fmt/colors.ts";
import { Application, HttpError, send, Status } from "../mod.ts";
(async () => { const app = new Application();
// Error handler middleware app.use(async (context, next) => { try { await next(); } catch (e) { if (e instanceof HttpError) { context.response.status = e.status as any; if (e.expose) { context.response.body = `<!DOCTYPE html> <html> <body> <h1>${e.status} - ${e.message}</h1> </body> </html>`; } else { context.response.body = `<!DOCTYPE html> <html> <body> <h1>${e.status} - ${Status[e.status]}</h1> </body> </html>`; } } else if (e instanceof Error) { context.response.status = 500; context.response.body = `<!DOCTYPE html> <html> <body> <h1>500 - Internal Server Error</h1> </body> </html>`; console.log("Unhandled Error:", red(bold(e.message))); console.log(e.stack); } } });
// Logger app.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)} - ${bold( String(rt) )}` ); });
// Response Time app.use(async (context, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; context.response.headers.set("X-Response-Time", `${ms}ms`); });
// Send static content app.use(async context => { await send(context, context.request.path, { root: `${Deno.cwd()}/examples/static`, index: "index.html" }); });
const address = "127.0.0.1:8000"; console.log(bold("Start listening on ") + yellow(address)); await app.listen(address);})();