Express.js Router 
Structured routing for Express.JS
Example
Every route is implemented in a dedicated file
Example:
.
+-- routes
| +-+ todos
| +-- create.js
| +-- update.js
| +-- delete.js
+-- models
| +-- todo.js
+-- server.js
Example route definition routes/todos/create.js
'use strict';
const Todo = require("../../models/todo");
function validate(req) {
if (!req.body.text) {
throw new Error('Missing parameter "text"')
}
}
async function respond(req, res, next) {
let { text } = req.body;
let user = req.preloadedData.user;
let todo = new Todo({
text,
user,
});
await todo.validate();
await todo.save();
res.status(201);
res.json({ todo });
}
export default {
path: '/todos',
method: 'POST',
validate
respond,
conditions : [ 'isLoggedIn' ],
preload : [ 'user' ],
};
Express app server.js
'use strict';
import express from 'express';
import router from 'expressjs-router';
const app = express();
router();
router.createConditional('isLoggedIn', async (req) => {
return !!req.session.user;
});
router.createPreloader('user', async (req) => {
return await User.findById(req.session.user._id);
});
router.setPreloadingMode(1);
router.create(app, "./path/to/routes");
app.listen(80);
- Routes prefixed by
_
or named index.js
won't be included - You can enable debug mode by calling
router.enableDebug();
- Route creation is recursive.
Changelog:
2.0.0
- Removed
express-validator
- Made validate function support asynchronous execution (using Promises)
- Added
ALL
to match any HTTP method - Allowed
method
to be an array of HTTP methods
License:
MIT