0

我最近与诗人建立了我的快递网站。我可以使用 post.url 和提供给所有视图的所有本地变量,除了 url 路由 - 例如,在我的 blog.jade 视图中:

 ul.blog-preview$
     each post in postList$
       li$
         a(href=#{post.url}) #{post.title}$  

视图渲染得很好,但是当点击 post.url 时路由快递会尝试:“http://localhost:8080/undefined/post/poet-testundefined” 我试图到达的帖子被称为“poet-test” . 所以,我尝试在视图中打印出 post.url

p #{post.url}

令我惊讶的是,它作为post/poet-test打印得很好。因此,显然我尝试浏览到 localhost:8080/post/poet-test,但这也不起作用,因为 post.title 上的引用错误,我怀疑这是一个问题,因为帖子在路由中迷路了。

这是我的 site.js(或大多数人称为 app.js),我已经包含了我认为必须与解决此问题相关的内容。

var express   = require('express')
  , app       = module.exports = express()
  , http      = require('http')
  , poet      = require('poet')(app)

poet
  .createPostRoute()
  .createPageRoute()
  .createTagRoute()
  .createCategoryRoute()
  .init(function(locals) {
    locals.postList.forEach(function ( post ) {
  console.log('loading post: ' + post.url)
})
  })

app.configure(function(){
  //...etc
  app.use(app.router);
  //...etc
  app.use(express.static(__dirname + '/public'));
});
//Dev settings
app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions:true, showStack:true }));
  app.set('port', process.env.PORT || 8080);
  app.use(express.logger('dev'));
});
//Production settings
//....etc

// controllers - load them
controllers = ["pages", "blog"]
for (i in controllers) {
  controller = require('./controllers/' + controllers[i]);
  controller.setup(app)
}

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});    

如您所见,我检查 post.url 以检查它在 poet.init(function(post) { ... }) 中加载的每个帖子,并且每个帖子都使用正确的 /post/title url...所以,我有点卡在这里。也许使用 app.router() 或诗人特定的解决方案以某种方式记录路由。

4

1 回答 1

0

查看 Poet repo 中的示例——你不应该逃避你的 hrefs .. 看起来 Poet 中的 url 很好,只是与 Jade 搏斗,试试这个:

a(href=post.url) post.title

https://github.com/jsantell/poet/blob/master/examples/views/includes/postSnippet.jade#L3

于 2013-01-20T15:40:40.417 回答