使用Express JS进行级联渲染

时间:2013-06-05 16:36:45

标签: node.js express connect

如果在节点服务器上运行快速应用程序,我将如何从完整路径递归搜索渲染文件,直接回到提供的URL的开头。

例如,如果有人要通过www.somewebsite.com/shop/products/product访问我的服务器,渲染引擎将首先检查shop / products / product /中是否有index.jade文件。如果没有找到,则会检查商店/产品/,然后购买/.

var express = require('express');

var app = express();

app.get('/*', function(req, res){

    res.render(req.path + '/index.jade', function(err, html){

        // some loopback code which alters the path and recalls the render method    

    })
});

问题是响应对象没有传递给渲染回调,所以我无法回忆起响应上的渲染。我正在寻找创建循环,因为URL路径可能是任意数量的目录深,所以我不能只假设我只需要级联一段时间。

任何人都能看到这种方式吗?

1 个答案:

答案 0 :(得分:0)

您应该能够使用闭包中的响应对象。我认为(假设express允许你第二次调用res.render)你可以使用像这个答案的代码来实现你想要的:

var express = require('express');

var app = express();

app.get('/*', tryRender);

function tryRender(req, res){

    res.render(req.path + '/index.jade', function(err, html){

        if (err) {
            req.path = 'mynewpath';
            tryRender(req, res);
        }    

    })
}

注意:您需要添加一个基本案例,否则如果找不到有效的视图,此函数将无限递归:D

如果express不允许后续调用res.render,您可能需要自己查明文件是否存在。