-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.ts
More file actions
25 lines (21 loc) · 688 Bytes
/
server.ts
File metadata and controls
25 lines (21 loc) · 688 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { HttpRequest, HttpResponse, MiddlewareHandler } from "./types.ts";
export class Server {
private middlewares: MiddlewareHandler[];
constructor() {
this.middlewares = [];
}
use(middleware: MiddlewareHandler) {
this.middlewares.push(middleware);
}
handleRequest(req: HttpRequest) {
const res: HttpResponse = { status: 200, body: "OK" };
// Chain middlewares using recursive closure
const runMiddleware = (index: number) => {
if (index >= this.middlewares.length) return;
const middleware = this.middlewares[index];
middleware.process(req, res, () => runMiddleware(index + 1));
};
runMiddleware(0);
return res;
}
}