我有一个应用程序,其视图位于以下目录中:
$ 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
下呈现任何文件,因为会有一些文件。我考虑使用静态目录,但看起来静态文件不会通过jade处理器中间件。
答案 0 :(得分:2)
params不能包含/
。评估后,/
将对网址进行标记,以获得参数。
执行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/
之后的所有内容,因此您可以正确呈现路径。所以你甚至可以在其中创建子目录