diff --git a/example/test.ts b/example/test.ts index 502d36f..fd629b0 100644 --- a/example/test.ts +++ b/example/test.ts @@ -2,6 +2,19 @@ import { Status } from "https://deno.land/std@0.186.0/http/http_status.ts"; import prettyTime from "npm:pretty-time"; import { HTTPServer } from "../mod.ts"; +const JOKES = [ + "Why do Java developers often wear glasses? They can't C#.", + "A SQL query walks into a bar, goes up to two tables and says “can I join you?”", + "Wasn't hard to crack Forrest Gump's password. 1forrest1.", + "I love pressing the F5 key. It's refreshing.", + "Called IT support and a chap from Australia came to fix my network connection. I asked “Do you come from a LAN down under?”", + "There are 10 types of people in the world. Those who understand binary and those who don't.", + "Why are assembly programmers often wet? They work below C level.", + "My favourite computer based band is the Black IPs.", + "What programme do you use to predict the music tastes of former US presidential candidates? An Al Gore Rhythm.", + "An SEO expert walked into a bar, pub, inn, tavern, hostelry, public house.", +]; + const httpServer = new HTTPServer(); httpServer.preprocessor((_req, rep) => { @@ -27,6 +40,30 @@ httpServer.error((req, _rep) => { ); }); +httpServer.get("/api/joke", (_req, rep) => { + const randomIndex = Math.floor(Math.random() * JOKES.length); + const joke = JOKES[randomIndex]; + rep.json({ + code: 200, + joke, + }); +}); + +httpServer.get("/site", (_req, rep) => { + const htmlTest = ` + + + HTML Test + + +

Hello World!

+ + + + `; + rep.html(htmlTest); +}); + httpServer.get("/", (req, rep) => { rep.status(Status.Teapot) .header("working", "true") diff --git a/mod.ts b/mod.ts index 6a878be..250f4aa 100644 --- a/mod.ts +++ b/mod.ts @@ -176,7 +176,7 @@ export class HTTPServer { let handler = await route.handler( routeRequest, routeReply, - ); + ) ?? routeReply.body; if (typeof (handler) == "object") { handler = JSON.stringify(handler, null, 2); @@ -374,6 +374,17 @@ export class RouteRequest { export class RouteReply { headers: Headers = new Headers(); statusCode: Status = Status.OK; + body: unknown; + + json(json: JSON | { [key: string]: unknown } | []) { + this.type("application/json"); + this.body = JSON.stringify(json, null, 2); + } + + html(html: string) { + this.type("text/html"); + this.body = html; + } header(name: string, value: string): RouteReply { this.headers.set(name, value);