我有一个应用程序,其视图位于以下目录中:
$ ftree ./web/views
| |____views
| | |____index.jade
| | |____404.jade
| | |____partials
| | | |____test.index.jade
| | | |____index.jade
| | | |____test
| | | | |____index.jade ****
| | |____layout.jade
| | |____500.jade
我希望能够在调用
/views/partials/test/index.jade
时在/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.jade
和partials/test.index.jade
都可以正常工作,但对于partials/test/index.jade
则失败(404)。我是否必须为
/partials
的每个子目录创建路由?我想表示要在/partials
下呈现任何文件,因为其中会有一些。我考虑改用静态目录,但是看起来静态文件不会通过玉器中间件。 最佳答案
参数不能包含/
。评估后,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/
之后的所有内容,因此您可以正确呈现路径。因此,您甚至可以在其中创建子目录关于node.js - 无论路径深度如何,如何使Express渲染一个目录中的任何 Jade 文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17076360/