不pipepath深度如何,我可以在一个目录中快速渲染任何一个jade文件?

我有一个应用程序的目录是这样的:

$ ftree ./web/views | |____views | | |____index.jade | | |____404.jade | | |____partials | | | |____test.index.jade | | | |____index.jade | | | |____test | | | | |____index.jade **** | | |____layout.jade | | |____500.jade 

当我打电话给/partials/test/index.jade时,我希望能够在/views/partials/test/index.jade上呈现视图。 我有我的路线设置如下:

 exports.partials = (req, res)-> filename = req.params.filename return unless filename # might want to change this console.log "rendering partial at #{filename}" res.render "partials/#{filename}" 

 app.configure(-> app.set('port', process.env.PORT || 3001) app.set('views', __dirname + '/views') app.set('view engine', 'jade') ... app.get('/partials/:filename', routes.partials) 

这一切都适用于partials/index.jadepartials/test.index.jade但对partials/test/index.jade失败(404)。

我必须为/partials每个子目录做一个路由吗? 我想表示将呈现/partials下的任何文件,因为将会有一些文件。 我考虑使用静态目录,但看起来像静态文件不会通过玉处理器中间件。

params不能包含/ 。 当评估的URL被标记为/获得参数。

当你做app.get('/partials/:filename', routes.partials)它匹配partials / index.jade,因为req.params.filename被设置为index.jade (只有一个有效的参数)。 但是它不匹配partials/test/index.jade因为需要两个参数匹配。

要达到你想要的,你可以做到这一点

 app.get('/partials/*', routes.partials) 

在路线上做:

 exports.partials = (req, res)-> filename = req.params return unless filename # might want to change this console.log "rendering partial at #{filename}" res.render "partials/#{filename}" 

在上面的代码中, req.params匹配/partials/之后的所有内容,以便正确显示path。 所以你甚至可以在里面创build子目录