In the last post, we were creating a common interface for creating express routes, thereby improving reusability.
We now want to take it up a notch. How about having some fun with Builder Pattern, using plain old Javascript Functions.
Creating express routes with Builder Pattern
So, I created a file RouteBuilder.js and it looks like this.
// RouteBuilder.js const express = require("express"); const RouteBuilder = function () { this.path = undefined; //string this.method = undefined; //string this.middlewares = undefined; //array of middlewares this.controller = undefined; //final request handler this.router = express.Router(); this.setPath = function (path) { this.path = path; return this; }; this.setMethod = function (method) { this.method = method; return this; }; this.setMiddlewares = function (middlewares) { this.middlewares = middlewares; return this; }; this.setController = function (controller) { this.controller = controller; return this; }; this.build = function () { this.router .route(this.path) [this.method.toLowerCase()](...this.middlewares, this.controller); return this.router; }; }; module.exports = RouteBuilder;
and you can invoke this RouteBuilder like this
const RouteBuilder = require('./RouteBuilder'); const authMiddleware = require("../authMiddleware") const validateMiddleware = require("../validateMiddleware") const actionMiddleware = require("actionMiddleware") const serviceMiddleware= require("serviceMiddleware") const routeBuilder = new RouteBuilder(); const userController = (req, res, next) => { res.send({}); }; //build the route let route = routeBuilder .setPath('/') .setMethod('GET') .setMiddlewares([ authMiddleware, validateMiddleware, actionMiddleware, serviceMiddleware, ]) .setController(userController) .build(); //Finally set the route to the app app.use("/users", route); // here app is the express app.
Top comments (0)