if else与我想要的完全相反

时间:2015-05-23 00:06:36

标签: node.js express mongoose

以下代码是控制器的一部分,用于切换帖子的“喜欢”状态。

它的工作原理如下:

  1. 首先,它会在用户的帖子中查找任何相似内容。
  2. 如果不存在,请“保存”状态。
  3. 如果存在,则“删除”现有的状态。
  4. 以下是代码:

    // 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")
    };
    

    现在两人都说结果+'已删除'

1 个答案:

答案 0 :(得分:4)

来自docs(我强调):

  

除非将它们定义为假的,否则所有值都是真实的(即除了    false 0 "" null undefined NaN )。

空数组([])不在上面的列表中,所以 truthy

您可能希望返回null