使用 Express JS 进行类似级联的渲染

问题描述 投票:0回答:1

如果 Express 应用程序在节点服务器上运行,我将如何从完整路径一直到所提供 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 路径可能是任意数量的目录深度,所以我不能假设我只需要级联一定次数。

有人看到解决这个问题的方法吗?

node.js express node.js-connect
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
,您可能需要自己查明该文件是否存在于文件系统上。

© www.soinside.com 2019 - 2024. All rights reserved.