add preprocessor handlers

This commit is contained in:
HorizonCode 2023-05-12 12:28:26 +02:00
parent 0675b26dad
commit 03a1f35eaa
2 changed files with 22 additions and 2 deletions

View File

@ -4,8 +4,11 @@ import { HTTPServer } from "../mod.ts";
const httpServer = new HTTPServer();
httpServer.middleware(async (req, rep, done) => {
httpServer.preprocessor((_req, rep) => {
rep.header("Access-Control-Allow-Origin", "*");
});
httpServer.middleware(async (req, _rep, done) => {
console.log(`${req.method} - ${req.remoteIpAddr} - ${req.path}`);
const processTime = await done();
console.log(`Processed in ${prettyTime(processTime)}`);

19
mod.ts
View File

@ -25,6 +25,11 @@ type RouteMiddlewareHandler = (
done: () => Promise<number[]>,
) => Promise<void>;
type RoutePreprocessor = (
req: RouteRequest,
rep: RouteReply,
) => void;
type RouteParam = {
idx: number;
paramKey: string;
@ -36,6 +41,7 @@ export class HTTPServer {
private staticLocalDir?: string;
private staticServePath?: string;
private notFoundHandler?: RouteHandler;
private preprocessors: RoutePreprocessor[] = [];
private middlewareHandler?: RouteMiddlewareHandler;
async listen(options: ListenOptions) {
@ -116,6 +122,10 @@ export class HTTPServer {
continue;
}
this.preprocessors.forEach((preProcessor) =>
preProcessor(routeRequest, routeReply)
);
let resolveAction: (value: number[]) => void = () => {};
let middlewarePromise;
const perStart = performance.now();
@ -198,7 +208,10 @@ export class HTTPServer {
(accum: { [key: string]: string }, curr: RouteParam) => {
return {
...accum,
[curr.paramKey]: routeSegments[curr.idx].replace(/(?!\/)\W\D.*/gm, ""),
[curr.paramKey]: routeSegments[curr.idx].replace(
/(?!\/)\W\D.*/gm,
"",
),
};
},
{},
@ -237,6 +250,10 @@ export class HTTPServer {
}
}
preprocessor(handler: RoutePreprocessor) {
this.preprocessors.push(handler);
}
middleware(handler: RouteMiddlewareHandler) {
this.middlewareHandler = handler;
}