我正在使用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/

10-12 05:28