add funcs for better content handling

This commit is contained in:
HorizonCode 2023-05-12 12:43:54 +02:00
parent 03a1f35eaa
commit e3e5f8c1d2
2 changed files with 49 additions and 1 deletions

View File

@ -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 prettyTime from "npm:pretty-time";
import { HTTPServer } from "../mod.ts"; 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(); const httpServer = new HTTPServer();
httpServer.preprocessor((_req, rep) => { 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>
<head>
<title>HTML Test</title>
</head>
<body>
<h1>Hello World!</h1>
<button onclick="alert('bruh')">Useless button, do not press.</button>
</body>
</html>
`;
rep.html(htmlTest);
});
httpServer.get("/", (req, rep) => { httpServer.get("/", (req, rep) => {
rep.status(Status.Teapot) rep.status(Status.Teapot)
.header("working", "true") .header("working", "true")

13
mod.ts
View File

@ -176,7 +176,7 @@ export class HTTPServer {
let handler = await route.handler( let handler = await route.handler(
routeRequest, routeRequest,
routeReply, routeReply,
); ) ?? routeReply.body;
if (typeof (handler) == "object") { if (typeof (handler) == "object") {
handler = JSON.stringify(handler, null, 2); handler = JSON.stringify(handler, null, 2);
@ -374,6 +374,17 @@ export class RouteRequest {
export class RouteReply { export class RouteReply {
headers: Headers = new Headers(); headers: Headers = new Headers();
statusCode: Status = Status.OK; 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 { header(name: string, value: string): RouteReply {
this.headers.set(name, value); this.headers.set(name, value);