Node.js + Express上的多个视图路径

我正在 在 编写CMS 。在我的CMS上,我有几个用于用户,页面等的模块。

我希望每个模块的文件都放在 , 。有人知道我该怎么做到吗?

我将 用作模板引擎,但如果有帮助,可以将其替换为其他东西。

回答:

自Express 4.10起,框架支持多视图文件夹功能。

只需将一系列位置传递给views属性,就像这样。

app.set('views', [__dirname + '/viewsFolder1', __dirname + '/viewsFolder2']);

据我所知,express目前不支持多个视图路径或名称空间(就像静态中间件一样)

但是您可以自己修改查找逻辑,以使其按您想要的方式工作,例如:

function enableMultipleViewFolders(express) {

// proxy function to the default view lookup

var lookupProxy = express.view.lookup;

express.view.lookup = function (view, options) {

if (options.root instanceof Array) {

// clones the options object

var opts = {};

for (var key in options) opts[key] = options[key];

// loops through the paths and tries to match the view

var matchedView = null,

roots = opts.root;

for (var i=0; i<roots.length; i++) {

opts.root = roots[i];

matchedView = lookupProxy.call(this, view, opts);

if (matchedView.exists) break;

}

return matchedView;

}

return lookupProxy.call(express.view, view, options)

};

}

您将通过调用上面的函数并传递 express 作为参数来启用新逻辑,然后将能够为配置指定视图数组:

var express = require('express');

enableMultipleViewFolders(express);

app.set('views', [__dirname + '/viewsFolder1', __dirname + '/viewsFolder2']);

或者,如果愿意,可以直接修补框架(更新其中的 view.js 文件)

这应该 ,不确定是否可以在新版本(3.x)中使用

不幸的是,上述解决方案在Express 3.x中不起作用,因为 express.view未定义的

另一个可能的解决方案是代理 response.render 函数并设置views文件夹配置,直到获得匹配:

var renderProxy = express.response.render;

express.render = function(){

app.set('views', 'path/to/custom/views');

try {

return renderProxy.apply(this, arguments);

}

catch (e) {}

app.set('views', 'path/to/default/views');

return renderProxy.apply(this, arguments);

};

我还没有测试过它,反正我还是很讨厌,不幸的是这个功能又被推迟了:https

:

//github.com/visionmedia/express/pull/1186

由于合并了以下拉取请求,因此Express

4.10中已添加此功能:https :

//github.com/spanloop/express/pull/2320

以上是 Node.js + Express上的多个视图路径 的全部内容, 来源链接: utcz.com/qa/403942.html

回到顶部