使用Express JS级联式渲染

通过运行在节点服务器上的快速应用程序,我将如何从完整pathrecursionsearch渲染文件,直到所提供的URL的开头。

例如,如果有人用www.somewebsite.com/shop/products/product打我的服务器,渲染引擎会首先检查shop / products / product /中是否有index.jade文件。 如果没有find,它会检查商店/产品/,然后购物/。

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 }) }); 

问题是响应对象没有传递给渲染callback,所以我无法回想回应的渲染。 我正在寻找创build一个循环,因为URLpath可能是任何数量的目录深,所以我不能只是假设我只需要级联一个明确的次数。

任何人都看到了这个方法?

您应该能够使用闭包中的响应对象。 我认为(假设明确允许你第二次调用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); } }) } 

注意:您将需要添加一个基本案例,否则如果该函数找不到可用的视图,则该函数将无限recursion:D

如果express不允许随后调用res.render ,那么您可能需要res.render确定文件系统上是否存在该文件。