我有一个应用程序,其 View 位于如下目录中:
$ 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
处渲染 View 。我的路线设置如下:
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 则失败 (404) .jade
。
我是否必须为/partials
的每个子目录创建一条路由?我想快速渲染 /partials
下的任何文件,因为其中会有一些文件。我考虑过使用静态目录,但看起来静态文件不会通过 Jade 处理器中间件。
最佳答案
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)
在 route :
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 - 如何快速渲染一个目录中的任何 jade 文件,无论路径深度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076360/