我正在用 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 片段。我想这是应该的,但我不想退回它。我不认为这是一个安全隐患,只是看起来有点不雅。
有没有办法阻止对该视图的直接请求?
奖金
这里还有一些奇怪的东西,这使它成为一个由两部分组成的问题。当我在语句中检查一个空的 post 数组时if
,Node 会忽略它。控制台输出显示posts = []
但它直接跳过它,然后抛出一个错误lastDate = posts.slice(-1)[0].publish_date;
我知道 JS 对空值(null、未定义、空字符串等)的行为很有趣,但我尝试了不同的结果相同。它似乎完全无视它。我在吃疯狂的药吗?