A simple helper to create and structure your express routers.
npm install express-router-helper
const { Router } = require('express');
const router = Router();
router.get('/cats', getAllCats);
router.get('/cats/:id', middleware1, middleware2, getOneCat);
export default router;
const { createRouter, HttpMethods } = require('express-router-helper');
export default createRouter({
prefix: 'cats',
routes: [
{
method: 'GET',
path: '',
handler: getAllCats
},
{
method: HttpMethods.GET // a little helper
path: ':id',
middleware: [middleware1, middleware2],
handler: getOneCat
}
]
});
- Then use it in like the following:
// somewhere inside your app.js, server.js, index.js or whatever.js 🤣
const app = express();
app.use(catRoute, dogRoute, etcRoute);
Express Router Helper - validation uses Indicative
const { createRouter } = require('express-router-helper');
export default createRouter({
prefix: 'cats',
routes: [
{
path: '',
method: 'GET',
validation: {
body: {
/** define rules & message */
},
headers: {
/** define rules & message */
},
query: {
sanitizes: {
limit: 'to_int'
},
rules: {
limit: 'required|integer|range:0,50',
username: 'required|string|unique_username'
},
messages: {
'limit.range': 'The {{field}} must be in range of 0 and 50.',
unique_username: 'The username cannot be cathub.'
}
},
options: {
abortEarly: false,
messages: {
/** define global custom messages */
required: 'Hey kiddo, the {{field}} field is required.',
string: 'The {{field}} field must be a string.'
},
extends: [
/** define global async or custom validations */
{ name: uniqueUsername.name, fn: uniqueUsername }
]
}
},
handler: getAllCats
}
]
});
// inside custom-validation-rules.js
export function uniqueUsername(data, field, message, args, get) {
return new Promise((resolve, reject) => {
/** @type {string} */
const fieldValue = get(data, field);
if (!fieldValue) return resolve('validation skipped'); // let required rule checks this.
if (fieldValue.toLowerCase() !== 'cathub') {
return resolve('validation skipped');
} // let required rule checks this.
return reject(message || 'CatHub username is taken.');
});
}
- Sanitization will always run before validation.
- Will validate headers first, then query, and body last.
MIT