atomic-view-router v1.0.0
#atomic-view-router Express router that defines URL paths based primarily on the views directory structure
Example:
var viewRouter = require('atomic-view-router');
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
app.use('/', viewRouter());Suppose the "views" directory contains the following files:
about.hbsindex.hbsgroups/admin.hbs
The existence of these files in the "views" directory will make the corresponding URL paths automatically resolve to content rendered by those templates. For instance:
- The URL
/will be rendered withindex.hbs. - The URL
/aboutwill be rendered withabout.hbs. - The URL
/groups/adminwill be rendered withgroups/admin.hbs.
The data will always come from response.locals, where response is the argument of the middleware function.
Defining data
With the view router, you can define middleware that focuses exclusively on defining data.
Put the data into the response.locals object and call next to skip the view router.
Make sure to set data in middleware ordered before the view router.
Example:
app.get('/calendar', function(request, response, next) {
response.locals.events = [
// define your event objects here
];
next();
// The view router will render "calendar.hbs" with everything provided in response.locals
})Missing views
If a URL path corresponds to a view file that does not exist, the view router will skip it, so it can be handled by another middleware function.
Specifying views
In your middleware before the view router where you define data to put into response.locals,
you can set response.locals.view to a string representing the explicit view that you would like to use,
in case the URL path does not correspond to any particular view file.
This is especially useful when routing for URL paths with parameters.
app.get('/category/:categoryId', function(request, response, next) {
response.locals.view = 'category';
response.locals.category = Categories.find(request.params.categoryId);
if (!response.locals.category) {
response.status(404);
}
next();
// The view router will render "category.hbs" even though the URL path does not correspond to it exactly.
})8 years ago