1

我有一个应用程序,其视图位于如下目录中:

$ 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.jadepartials/test.index.jade但它失败(404)partials/test/index.jade

我是否必须为每个子目录创建路由/partials?我想表达在 下渲染任何文件/partials,因为会有一些文件。我考虑使用静态目录,但看起来静态文件不会通过玉处理器中间件。

4

1 回答 1

2

参数不能包含/. 评估时,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/的所有内容,因此您可以正确渲染路径。所以你甚至可以在其中创建子目录

于 2013-06-13T04:20:52.387 回答