大佬教程收集整理的这篇文章主要介绍了Node.js Express上的多个视图路径,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想让每个模块将他的文件在单独的文件夹,包括视图文件。
任何人都知道如何实现呢?
我使用swig作为我的模板引擎,但我可以替换它的东西,如果它会有所帮助。
app.set('views',[__dirname + '/viewsFolder1',__dirname + '/viewsFolder2']);
Express 2.0
据我所知,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,options) }; }
您将通过调用上述函数并将express作为参数传递来启用新逻辑,然后您将能够为配置指定一个视图数组:
var express = require('express'); enableMultipleViewFolders(express); app.set('views',__dirname + '/viewsFolder2']);
或者,如果你喜欢,你可以直接修补框架(更新其中的view.js文件)
这应该工作在Express 2.x,不知道如果它将与新版本(3.X)
更新
不幸的是上面的解决方案不会在Express 3.x中工作,因为express.view将是未定义的
另一个可能的解决方案是代理response.render函数并设置views文件夹config,直到它获得匹配:
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); };
我没有测试它,它感觉非常hacky对我反正,不幸的是这个功能已被推回了:
https://github.com/visionmedia/express/pull/1186
更新2
此功能已在Express 4.10中添加,因为以下拉式请求已合并:
https://github.com/strongloop/express/pull/2320
以上是大佬教程为你收集整理的Node.js Express上的多个视图路径全部内容,希望文章能够帮你解决Node.js Express上的多个视图路径所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。