if else和我想要的完全相反



以下代码是控制器的一部分,用于切换帖子的"like"状态

它是这样工作的:

  1. 首先,它查找用户在帖子上的任何喜欢。
  2. 如果不存在,"save"like status
  3. 如果存在,"删除"现有的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

相关内容

最新更新