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, где каждая область получает свою собственную папку представлений.
Ответы
Ответ 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'));
});