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

Sun*_*oot 26 node.js express

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

app.configure(function() {
    app.set('views', __dirname + '/views');
    .... snip ....
});
Run Code Online (Sandbox Code Playgroud)

...并且我的所有视图模板都进入了views文件夹.

是否可以覆盖Express在请求的基础上查找请求的视图?例如,类似于以下内容:

app.get('/', function(req, res) {
    res.render('index', { viewFolder: 'otherViews' });
});
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ave 22

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

app.get('/', function(req, res) {
    res.render('areaName/viewName');
});
Run Code Online (Sandbox Code Playgroud)

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


小智 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);
};
Run Code Online (Sandbox Code Playgroud)