Node.js、Express、MongoDBを使用してブログを作成しています。
ホームページには、さらに投稿を読み込むためのボタンがあります。これは正常に機能し、次のコードで実行します。
jQuery
$("#load-more-posts").click(function() {
$.ajax({
url: '/load/posts/',
type: 'get',
dataType: 'html',
success: function(data) {
$("#primary").append(data);
},
data: {"passLastDate": lastDate}
});
return false;
});
これがapp.jsのルートです
app.get("/load/posts", routes.loadPosts);
そして、ここにビューがあります:
loadPosts: function(req, res) {
var lastDate;
lastDate = req.query.passLastDate;
return Post.find({
"published": true,
"publish_date": {
$lt: lastDate
}
}).sort('-publish_date').limit(1).execFind(function(err, posts) {
if (posts === []) {
console.log("thats it");
return res.render("thats-it", {
layout: false
});
} else {
lastDate = posts.slice(-1)[0].publish_date;
return res.render("more-posts", {
layout: false,
posts: posts,
lastDate: lastDate
});
}
});
}
私が言ったように、これはすべてうまくいきます。ただし、コンソールからGET URLをコピーしてブラウザに直接貼り付けると、返されるHTMLスニペットが返されます。これは正常に機能していると思いますが、返却したくありません。私はそれがセキュリティ上の危険ではないと思います、ただ少しエレガントではないようです。
このビューへの直接リクエストをブロックする方法はありますか?
ボーナス
これは奇妙なことで、これを2部構成の質問にします。ステートメントで空のpost配列をチェックするとif
、Nodeはそれを無視します。コンソール出力は表示posts = []
されますが、すぐにスキップされ、エラーがスローされますlastDate = posts.slice(-1)[0].publish_date;
。JSが空の値(null、未定義、空の文字列など)でおかしな動作をすることはわかっていますが、同じ結果で別の値を試しました。完全に無視しているようです。私はクレイジーな薬を飲んでいますか?