Add more files
This commit is contained in:
101
deno/routes.ts
Normal file
101
deno/routes.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
type Method = "get" | "post" | "put" | "patch" | "delete";
|
||||
|
||||
import { HttpCode, httpCodes } from "./http-codes.ts";
|
||||
import { ContentType, contentTypes } from "./content-types";
|
||||
import { services } from "./services";
|
||||
|
||||
type Response = {
|
||||
code: HttpCode;
|
||||
contentType: ContentType;
|
||||
result: string;
|
||||
};
|
||||
|
||||
type Handler = (req: Request) => Response;
|
||||
|
||||
const phandler: Handler = (req: Request) => {
|
||||
const code = httpCodes.success.OK;
|
||||
return {
|
||||
code,
|
||||
result: "it is ok ",
|
||||
contentType: contentTypes.text.plain,
|
||||
};
|
||||
};
|
||||
|
||||
type Route = {
|
||||
path: string;
|
||||
methods: Method[];
|
||||
handler: Handler;
|
||||
};
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
path: "/ok",
|
||||
methods: ["get"],
|
||||
handler: (req) => {
|
||||
const code = httpCodes.success.OK;
|
||||
const rn = services.random.randomNumber();
|
||||
|
||||
return {
|
||||
code,
|
||||
result: "it is ok " + rn,
|
||||
contentType: contentTypes.text.plain,
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "/alsook",
|
||||
methods: ["get"],
|
||||
handler: (req) => {
|
||||
const code = httpCodes.success.OK;
|
||||
return {
|
||||
code,
|
||||
result: "it is also ok",
|
||||
contentType: contentTypes.text.plain,
|
||||
};
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
type DenoRequest = globalThis.Request;
|
||||
type UserRequest = {};
|
||||
type Request = {
|
||||
pattern: string;
|
||||
path: string;
|
||||
method: Method;
|
||||
parameters: object;
|
||||
denoRequest: globalThis.Request;
|
||||
};
|
||||
type ProcessedRoute = { pattern: URLPattern; method: Method; handler: Handler };
|
||||
const processedRoutes: ProcessedRoute[] = routes.map(
|
||||
(route: Route, idx: number, allRoutes: Route[]) => {
|
||||
const pattern: URLPattern = new URLPattern({ pathname: route.path });
|
||||
const method: Method = route.method;
|
||||
const handler = (denoRequest: DenoRequest) => {
|
||||
const req: Request = {
|
||||
pattern: route.pattern,
|
||||
path: denoRequest.path,
|
||||
method: denoRequest.method,
|
||||
parameters: { one: 1, two: 2 },
|
||||
denoRequest,
|
||||
};
|
||||
return route.handler(req);
|
||||
};
|
||||
|
||||
return { pattern, method, handler };
|
||||
},
|
||||
);
|
||||
|
||||
function handler(req: globalThis.Request): globalThis.Response {
|
||||
for (const [idx, pr] of processedRoutes.entries()) {
|
||||
const match = pr.pattern.exec(req.url);
|
||||
if (match) {
|
||||
const resp = pr.handler(req);
|
||||
|
||||
return new globalThis.Response(resp.result);
|
||||
}
|
||||
}
|
||||
|
||||
return new globalThis.Response("not found", { status: 404 });
|
||||
}
|
||||
|
||||
Deno.serve(handler);
|
||||
Reference in New Issue
Block a user