2

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

例如,如果有人通过 www.somewebsite.com/shop/products/product 访问我的服务器,渲染引擎将首先检查 shop/products/product/ 中是否存在 index.jade 文件。如果没有找到,它将检查 shop/products/,然后检查 shop/。

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 路径可能是任意数量的目录,所以我不能假设我只需要级联确定的次数。

有人看到解决方法吗?

4

1 回答 1

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,您可能需要自己确定文件是否存在于文件系统中。

于 2013-06-05T16:42:14.230 回答