Sunday Ironfoot
Sunday Ironfoot

Reputation: 13050

Node/Express.js - Overriding where to look for the 'Views' folder for each request

In my Node/Express.js project I can set the views folder globally like so:

app.configure(function() {
    app.set('views', __dirname + '/views');
    .... snip ....
});

...and all my view templates go into the views folder.

Is it possible to override where Express looks for views on a request by request basis? For instance, something like the following:

app.get('/', function(req, res) {
    res.render('index', { viewFolder: 'otherViews' });
});

The reason I ask is I'm trying to replicate Microsoft ASP.NET MVC's Areas functionality where each Area gets it's own views folder.

Upvotes: 25

Views: 20416

Answers (3)

user3919896
user3919896

Reputation: 61

As a more modular solution, I did something like this in sails.js. Just over-ride the render function for the given request in your middleware. :)

var curRender = res.render;
res.render = function(path, locals, func) {
    var args = [res.locals.explicitPath + '/' + path, locals, func];
    curRender.apply(this, args);
};

Upvotes: 6

laggingreflex
laggingreflex

Reputation: 34627

Full path works too

app.get('/', function(req, res) {
    res.render(path.join(__dirname, 'view.jade'));
});

Upvotes: 0

Dave
Dave

Reputation: 2417

The 'views' setting is the root directory, so you should be able to specify a sub-folder in the hierarchy:

app.get('/', function(req, res) {
    res.render('areaName/viewName');
});

It means your 'areas' need to be sub-folders, but it allows you to accomplish the separation you are looking for.

Upvotes: 22

Related Questions