A scalable, type-safe route registry system for Express.js using TypeScript.
- Nested route tree support
- Versioned base paths (
/v1,/v2, etc.) - Global, group, and route-level middleware
- Clean logging of all registered routes
- Fully type-safe (
Route,RouteTree,RouteGroup) - Easily extendable for multiple API versions
- Node.js: v18 or higher
- Express.js: v5.x
- TypeScript: v5.x
- ts-node / nodemon: For development and live reloading
git clone https://github.com/giorgi225/express-route-registry.git
cd route-registry
npm install
npm run devimport express from "express";
import { RouteRegistry } from "./core/router";
import { authRouteGroup } from "./router/auth/routes";
const app = express();
// Initialize versioned route registries
const routerV1 = new RouteRegistry({ version: "v1", logging: true });
const routerV2 = new RouteRegistry({ version: "v2", logging: true });
// Register route groups
routerV1.registerGroup(authRouteGroup);
routerV2.registerGroup(authRouteGroup);
// Mount routers under /api
app.use("/api", routerV1.getRouter());
app.use("/api", routerV2.getRouter());
// Log all registered routes
routerV1.logRegisteredRoutes();
routerV2.logRegisteredRoutes();
// Start the server
app.listen(8000, () => console.log("Server running at http://localhost:8000"));import { Request, Response } from "express";
import { ApiRouter } from "../../types/route.types";
export const authRouteGroup: ApiRouter.RouteGroup = {
basePath: "/auth",
middleware: [], // optional middleware for this group
routes: {
login: {
method: "get",
path: "/login",
middleware: [], // optional middleware for this route
handler: (req: Request, res: Response) => res.send("Login"),
},
register: {
method: "get",
path: "/register",
middleware: [],
handler: (req: Request, res: Response) => res.send("Register"),
},
},
};The MIT License.