如果在节点服务器上运行快速应用程序,我将如何从完整路径递归搜索渲染文件,直接回到提供的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路径可能是任意数量的目录深,所以我不能只假设我只需要级联一段时间。
任何人都能看到这种方式吗?
答案 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
,您可能需要自己查明文件是否存在。