【发布时间】:2013-03-27 06:22:47
【问题描述】:
我正在使用 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 sn-p。我想这是应该的,但我不想退回它。我不认为这是一个安全隐患,只是看起来有点不雅。
有没有办法阻止对该视图的直接请求?
奖金
这里还有一些奇怪的东西,它把它变成了一个由两部分组成的问题。当我在 if 语句中检查一个空的 post 数组时,Node 会忽略它。控制台输出显示posts = [] 但它直接跳过它然后在lastDate = posts.slice(-1)[0].publish_date; 上引发错误同样的结果。它似乎完全无视它。我在吃药吗?
【问题讨论】:
标签: javascript jquery ajax node.js express