以下代码是控制器的一部分,用于切换帖子的"like"状态
它是这样工作的:
- 首先,它查找用户在帖子上的任何喜欢。
- 如果不存在,"save"like status
- 如果存在,"删除"现有的like状态。
代码如下:
// api/posts
exports.postLikes = function(req,res){
var like = new Like({
postId: req.params.postId,
user: req.user._id
});
Like.find()
.and([
{user:req.user._id},
{postId:req.params.postId}
]) // check for existing likes
.exec(function(err, result){
if(!result){ // if there is no result
like.save(function(err){
if(err){res.send(err);}
Post.findById(req.params.postId, function(err,post){
if(err) return res.send(err);
post.likeId.push(like);
post.save(function(err){
if(err) return res.send(err);
res.json({status:'done'})
});
});
});
}else{ //if there is result
res.json({status:'deleted'}) // just says deleted for now
};
});
};
但是,当没有结果时返回{status:'deleted'}
,当有结果时添加额外的点赞。
结果返回与存储在MongoDB
{ _id: 555f4ee2f0ea4f8004690ba5,
postId: 555e649b3e5e24f0200f0f16,
user: 555e1c9fd5ec350421ec7cfa,
__v: 0,
created: Sat May 23 2015 00:44:34 GMT+0900}
如果不存在,则返回
[]
为了测试的目的,我修改了我的代码,使其工作更简单
if(result != null){
res.send(result + "deleted")
}else{
res.send(result + "added")
};
现在都说result + 'deleted'
从文档(我强调):
所有值都是真值,除非它们被定义为假值(即,except)对假, 0 , " , 空, 定义,和南)。
一个空数组([]
)不在上面的列表中,所以它是 true
您可能需要返回null
。