最近、詩人と一緒にエクスプレスサイトを開設しました。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}
そして驚いたことに、それはポスト/詩人テストとしてうまく印刷されました。だから、明らかに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'));
});
ご覧のとおり、poet.init(function(post){...})に読み込まれる各投稿のpost.urlを確認し、それぞれが正しい/ post /titleurlで確認します...私はここで少し立ち往生しています。おそらく、app.router()または詩人固有のソリューションを使用してルートをログに記録します。