我正在实施一个受IP限制的post upvote系统。到目前为止,提交单个帖子的路由包含4个总查询,以完成这些步骤:
- 否则 -
我觉得最后两个步骤可以组合在一起,但是如果我在将upvote关联到它之后返回帖子,那么它不包括在内是有意义的,因为当发现它没有关联的upvote时。这就是我现在拥有的东西,我认为单一的upvote效率非常低。
router.get('/posts/:id/upvote', function(req, res) {
var id = req.params.id;
var query_options = {
where: {
id: id
},
include: common_includes
};
// Look for already existing upvote with same PostId and IP.
Upvote.findOne({ where: { ip: req.ip, PostId: id }}).then(function(upvote) {
if (upvote !== null) return res.fail('Already upvoted');
// No upvote exists, create one
Upvote.create({
ip: req.ip
}).then(function(upvote) {
// Find post to associate upvote with
Post.findOne({ where: { id: id }}).then(function(post) {
// Associate upvote to post
upvote.setPost(post).then(function() {
// Query again to get updated post to be returned
Post.findOne(query_options).then(function(post) {
return res.pass(formatPost(post));
}).error(function(err) {
console.log(err);
return res.fail('Server error');
});
}).error(function(err) {
console.log(err);
return res.fail('Server error');
});
}).error(function(err) {
console.log(err);
return res.fail('Server error');
});
}).error(function(err) {
console.log(err);
return res.fail('Server error');
});
});
});
答案 0 :(得分:0)
可能会有帮助http://docs.sequelizejs.com/en/latest/docs/associations/#creating-with-associations。
但恕我直言,你可以将第2步和第3步结合起来:
Upvote.create({
ip: req.ip,
PostId: id
})
然后获取新帖子