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
- required
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