Node / Express.js - 覆盖每个请求的“Views”文件夹的位置

时间:2012-02-27 18:47:17

标签: node.js express

在我的Node / Express.js项目中,我可以全局设置views文件夹:

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

...我的所有视图模板都会进入views文件夹。

是否可以覆盖Express在请求基础上查找请求的位置?例如,如下所示:

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

我问的原因是我正在尝试复制Microsoft ASP.NET MVC的区域功能,其中每个区域都有自己的视图文件夹。

3 个答案:

答案 0 :(得分:22)

'views'设置是根目录,因此您应该能够在层次结构中指定子文件夹:

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

这意味着您的“区域”需要是子文件夹,但它允许您完成您正在寻找的分离。

答案 1 :(得分:6)

作为一个更模块化的解决方案,我在sails.js中做了类似的事情。 只需覆盖中间件中给定请求的渲染功能。 :)

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

答案 2 :(得分:0)

完整路径也适用

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