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.
About the author
Gurgaon, India
Comments
Join the discussionNo comments yet. Be the first to comment.
Rediscovering ExpressJS Applications
In this series, I'll show different ways of refactoring your expressJS application

