node.js - 如何快速渲染一个目录中的任何 jade 文件,无论路径深度如何?

标签 node.js express url-routing

我有一个应用程序,其 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.jadepartials/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/

相关文章:

node.js - 可扩展的 Node 快速路线

ios - 使用 socket.io v1.3.x 将单个用户的请求发送到一组预定义用户

表达静态文件夹与包罗万象的路线

asp.net - 路由中的自定义包罗万象参数

javascript - React-Router:将 props 传递给 React-Router ^2.0.0 中的嵌套路由组件的最佳方法?

javascript - AngularJS 中的路由错误

javascript - 导出一个 javascript 对象然后修改该导出文件中的该对象是否也会对导出的实例进行修改?

javascript - javascript 中的 Promise 底层是如何工作的?我的 Promise 实现效果不一样

node.js - 在array.foreach Sequelize 中查询数据库

javascript - Babel 无法在主 Node.js 应用程序之外工作