我正在使用expressjs编写应用程序。我的视图通常位于/ views文件夹中。它们满足了我90%的客户需求,但是有时我不得不覆盖其中的一个或另一个视图以添加定制的功能。我真的很奇怪我可以建立一个像这样的文件夹结构:
*{ ...other expressjs files and folders...}*
/views
view1.jade
view2.jade
view2.jade
/customerA
view2.jade
/customerB
view3.jade
我想重写expressjs的response.render()函数的行为以应用以下算法:
1. a customer requests a view
2. if /{customer_folder}/{view_name}.jade exists, than
render /{customer_folder}/{view_name}.jade
else
render /views/{view_name}.jade
因此,对于customerA,response.render('view1')将引用/views/view1.jade,而response.render('view2')将引用/customerA/view2.jade
(那些使用appcelerator钛金属的人听起来很熟悉)
我想以一种优雅的方式来实现此行为,而不必担心修改expressjs的核心功能的麻烦,因此可能会在升级我的框架时得到处理。我想这是一个普遍的问题,但是我在网上找不到任何文章。
最佳答案
您可以挂钩http.ServerResponse.render
。
这是我的想法,用作中间件:
var backup = res.render
res.render = function() {
//Do your thing with the arguments array, maybe use environment variables
backup.apply(res, arguments) //Function.prototype.apply calls a function in context of argument 1, with argument 2 being the argument array for the actual call
}
关于javascript - expressjs条件 View 渲染路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20303440/