Подтвердить что ты не робот

Node/Express.js - переопределение, где искать папку "Представления" для каждого запроса

В моем проекте Node/Express.js я могу установить папку представлений по всему миру так:

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

... и все мои шаблоны просмотров входят в папку представлений.

Можно ли переопределить, где Express ищет представления на основе запроса по запросу? Например, что-то вроде следующего:

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

Я спрашиваю, я пытаюсь реплицировать функциональность Microsoft ASP.NET MVC Areas, где каждая область получает свою собственную папку представлений.

4b9b3361

Ответ 1

Параметр "views" является корневым каталогом, поэтому вы должны иметь возможность указать подпапку в иерархии:

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

Это означает, что ваши "области" должны быть подпапками, но это позволяет вам выполнить разделение, которое вы ищете.

Ответ 2

Как более модульное решение, я сделал что-то подобное в sails.js. Просто переверните функцию рендеринга для данного запроса в вашем промежуточном программном обеспечении.:)

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

Ответ 3

Полный путь работает тоже

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