我正在用Node.js,Express和MongoDB構建博客。Node.js/Express:防止直接從URL加載AJAX HTML片段
在主頁上我有一個按鈕來加載更多的職位。這工作得很好,我用下面的代碼完成它:
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片段。我想這是應該的,但我不想退還。我不認爲這是一個安全隱患,只是看起來有點不雅。
有沒有辦法阻止對此視圖的直接請求?
BONUS
這裏是別的東西很奇怪,並且使這是一個問題兩個部分。當我在if
語句中檢查空的post數組時,Node會忽略它。控制檯輸出顯示posts = []
但它跳過它,然後在lastDate = posts.slice(-1)[0].publish_date;
lastDate = posts.slice(-1)[0].publish_date;
我知道JS的行爲有趣的空值(空,未定義,空字符串等),但我已經嘗試了不同的結果相同的結果。它似乎完全忽略它。我正在服用瘋狂的藥丸嗎?
這兩個工作,謝謝! – 2013-03-27 15:31:58