Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
class Router {
|
||||
constructor(base) {
|
||||
this.routes = [];
|
||||
this.base = base;
|
||||
};
|
||||
|
||||
addRoute(method, path, handler) {
|
||||
const paramNames = [];
|
||||
const regexPath = path
|
||||
.replace(/:([^/]+)/g, (match, paramName) => {
|
||||
paramNames.push(paramName);
|
||||
return '([^/]+)';
|
||||
})
|
||||
.replace(/\*/g, '.*');
|
||||
|
||||
this.routes.push({
|
||||
method,
|
||||
path,
|
||||
regex: new RegExp(`^${regexPath}$`),
|
||||
paramNames,
|
||||
handler
|
||||
});
|
||||
}
|
||||
|
||||
get(path, handler) {
|
||||
this.addRoute("GET", this.base ? this.base + path : path, handler);
|
||||
console.info(this.base ? this.base + path : path)
|
||||
}
|
||||
|
||||
post(path, handler) {
|
||||
this.addRoute("POST", this.base ? this.base + path : path, handler);
|
||||
console.info("POST", this.base ? this.base + path : path)
|
||||
|
||||
}
|
||||
|
||||
put(path, handler) {
|
||||
this.addRoute("PUT", this.base ? this.base + path : path, handler);
|
||||
}
|
||||
|
||||
delete(path, handler) {
|
||||
this.addRoute("DELETE", this.base ? this.base + path : path, handler);
|
||||
}
|
||||
|
||||
handle(res, req) {
|
||||
const method = req.getMethod().toUpperCase();
|
||||
const urlPrepare = req.getUrl().split("/");
|
||||
const urlRelevant = urlPrepare.slice(2, urlPrepare.length);
|
||||
const url = "/" + urlRelevant.join("/");
|
||||
console.info("hm?", method)
|
||||
for (const route of this.routes) {
|
||||
if (route.method === method) {
|
||||
const match = url.match(route.regex);
|
||||
console.info(url, route, method)
|
||||
if (!match) continue;
|
||||
|
||||
const params = {};
|
||||
route.paramNames.forEach((name, index) => params[name] = match[index + 1]);
|
||||
|
||||
req.params = params;
|
||||
|
||||
return route.handler(res, req);
|
||||
};
|
||||
};
|
||||
|
||||
res
|
||||
.writeStatus("404 Not Found")
|
||||
.end("Invalid route");
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = Router;
|
||||
Reference in New Issue
Block a user