express-routing-helper

This is a middleware loader to help loads all routers/middlewares and mount to the Express app

Usage no npm install needed!

<script type="module">
  import expressRoutingHelper from 'https://cdn.skypack.dev/express-routing-helper';
</script>

README

What is this?

This is a middleware loader to help loads all routers/middlewares and mount to the Express app

What does it do?

It automatically loads all routers in your specified directory.

Usage

  • useMiddlewares(app, path, responseHandler) takes two parameter:
    • required app: the express app
    • required path: the relevant path to your routers
    • optional responseHandler: your custom response handler function

if no responseHandler is provided, a default response handler will be used:

function defaultResponseHandler (req, res, next) {
  return res.status(200).json({ data: req.result })
}
const express = require('express')
const routingHelper = require('../index')

const PORT = 3000
const app = express()
// you can still mount any other middlewares
app.use('/', (req,res,next)=>{
  req.result = {}
  next()
})
// create your own response handler
function responseHandler(req,res){
  Object.assign(req.result, {
    responseHandler: 'custom response handler'
  })
  res.json(req.result)
}

// loads your custom pre/post middlewares
routingHelper.useMiddlewares(app, 'lib/apis', responseHandler)

app.listen(PORT, () => console.log('server started'))

Create your API

Then you can write your router like below:

  • replace YourAPI yourMethod with any API name and any API method name you like
const YourAPI = {}
const YourAPI.yourMethod = function(req,res,next){}
// array of pre middleware functions
const YourAPI.yourMethod.pre = [] 
// array of post middleware functions
const YourAPI.yourMethod.post = []

module.exports = YourAPI

Example

You can structure your workspace like below:

node_modules
lib
  ↳apis
    ↳dogs
      ↳getDogs.js
      ↳putDogs.js
    ↳books.js
    ↳users.js
  ↳app.js
  • You can group relevant api files into one file directory lib/api/dogs/getDogs.js
const getDogs = function (req) {
  req.result.getAll = "DogAPI getAll"
}

getDogs.route = ['get', '/dogs']
getDogs.pre = [
  function (req) {
    req.result.pre1 = "get dogs pre async func"
  },
  function (req) {
    req.result.pre2 = "get dogs pre normal func"
  }
]
getDogs.post = [
  function (req) {
    req.result.post1 = "get dogs post normal func"
  },
  async function (req) {
    req.result.post2 = "get dogs async normal func"
  }
]

module.exports = getDogs
  • Or you can use a single file to structure your api lib/apis/users.js
const UserAPI = {}
// GET /users
UserAPI.getUsers = async function (req, res, next){
  req.result = {
    user: "User A"
  }
}
UserAPI.getUsers.route = ['get', '/users']
UserAPI.getUsers.pre = []
UserAPI.getUsers.post = []

// POST /users
UserAPI.postUsers = async function (req, res, next){
  req.result = {
    user: "New User"
  }
}
UserAPI.postUsers.route = ['post', '/users']
UserAPI.postUsers.pre = []
UserAPI.postUsers.post = []
module.exports = UserAPI
  • The execution order is:
pre middlewares => response handler => post middlewares