Separate route definitions and where they're served from
This commit is contained in:
45
deno/app.ts
Normal file
45
deno/app.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
// app.ts
|
||||
|
||||
import { services } from "./services";
|
||||
import{DenoRequest, Method, ProcessedRoute, Request, Route} from './types'
|
||||
|
||||
import {routes} from './routes'
|
||||
|
||||
services.logging.log({ foo: 1 });
|
||||
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 = async (denoRequest: DenoRequest) => {
|
||||
const req: Request = {
|
||||
pattern: route.pattern,
|
||||
path: denoRequest.path,
|
||||
method: denoRequest.method,
|
||||
parameters: { one: 1, two: 2 },
|
||||
denoRequest,
|
||||
};
|
||||
return route.handler(req);
|
||||
};
|
||||
|
||||
const retval: ProcessedRoute = { pattern, method, handler };
|
||||
|
||||
return retval
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
async 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 = await 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