喜欢按钮,在数据库上加减。 nodejs, mongodb, 猫鼬, jquery

Posted

技术标签:

【中文标题】喜欢按钮,在数据库上加减。 nodejs, mongodb, 猫鼬, jquery【英文标题】:Like button, add and subtract on database. nodejs, mongodb, mongoose, jquery 【发布时间】:2017-01-30 22:32:46 【问题描述】:

我正在建立一个用户可以喜欢的网站,点赞按钮正在工作,它将喜欢的内容存储在数据库中。 我的问题是,我怎样才能让用户再次单击“赞”按钮时,它会在数据库中减去。 我有一个喜欢按钮的动画,第一个默认状态是灰色,然后当用户点击它时,它会变成蓝色,旁边会出现一个“喜欢”的文字。然后当用户再次点击时,它会变回黑色。

这是我在 POST 路由上的代码(因为我正在向数据库添加数据)

app.post("/index/:id", function(req,res)
    TestData.findById(req.params.id, function(err, theUser)
        if(err)
            console.log(err);
         else 
            theUser.likes += 1;
            theUser.save();
            console.log(theUser.likes);
        
    );
);

我的 EJS 文件:

      <a class="likeicon" href="/index/<%= newUsers._id %>?_method=POST">
       <i class="fa fa-thumbs-o-up" aria-hidden="true" ></i>
      </a>

还有我的 jQuery:

$(".likeicon").on('click', function()
if($(this).css("color") === "rgb(0, 0, 255)")
  $("#likedtxt").remove();
  $(this).css("color", "black");
  $(this).animate(fontSize: "15px");


 else 
  $(this).css("color", "blue");
  $(this).append("<span id='likedtxt'>Liked</span>");
  $(this).animate(fontSize: "18px");
  
);

还有另一个问题,当我点击喜欢时,它正在添加到数据库中,但是我如何在用户屏幕上实时显示喜欢的计数已更新?无需重新加载屏幕。因为我不想使用 res.redirect,所以它会刷新网页。

【问题讨论】:

【参考方案1】:

Imo 更好,您可以将 onclick 函数写入“likeicon”按钮

<a class="likeicon" userId="<%= newUsers._id %>" onclink="updateLikes()">
   <i class="fa fa-thumbs-o-up" aria-hidden="true" > 49 </i>
</a>

功能:

function updateLikes() 
    id = $('.likeicon').attr('userId');
    $.post('/index/' + id, function (response) 
        $('fa-thumbs-o-up').text(response.likeCount); //your counter on a page
        //and update likes counter with response
    )

还有node.js

app.post("/index/:id", function (req, res) 
    TestData.findById(req.params.id, function (err, theUser) 
        if (err) 
            console.log(err);
         else 
            theUser.likes += 1;
            theUser.save();
            console.log(theUser.likes);
            res.send(likeCount: theUser.likes); //something like this...
        
    );
);

【讨论】:

res.send('some data to send'); 你想从这个地方发送什么?我当然不会theuser.likes 哦,我的错。我想“还有另一个问题,当我点击喜欢时,它正在添加到数据库中,但是我如何才能实时显示它”只针对一个点击的用户...... Idk 然后如何更新所有用户的喜欢 伙计们,有没有办法,例如,当我更新数据库上的数据时,它也会更新网页上的 LIVE?无需重新加载网页?因为如果我输入类似“res.redirect(“back”)”的内容,它会返回网页,刷新并且用户会看到更新后的点赞数。但我不想刷新我的网页。 对一个按“赞”的用户还是对所有用户? 只为每个按赞的用户。【参考方案2】:

对于更新的点赞数,您应该从服务器发送更新的点赞数,例如:

app.post("/index/:id", function(req,res)
  TestData.findById(req.params.id, function(err, theUser)
      if(err)
          console.log(err);
          return res.status(500).send('Something went wrong!'); // You should notify user about any error    
       else 
          theUser.likes += 1;
          theUser.save(function(err)
          if(err) return res.status(500).send('Something went wrong!');
          return res.send(likes_count: theUser.likes);
          );

      
  );
);

【讨论】:

在我的网站上,有图片和每张图片的点赞数和评论数。每当我喜欢这张照片时,喜欢的数字应该会实时更新,而无需重新加载网站。所以“res.send()”是行不通的。你知道我不能实时更新点赞数的方法吗? 我们来安排吧。如果我喜欢这张图片,那么应该为我和任何用户更新喜欢的数量,而无需重新加载。正确的?如果是,您可以使用套接字,例如。 socket.io socket.io可以实时从数据库POST/GET数据吗?【参考方案3】:

从前端发送值不是一个好主意...

相反,您可以使用 MongoDB 内置操作 => '$inc'

增加猫鼬对象模型字段中的值。

router.post('/:id',(req,res,next)=>
counter = req.body.like;
TestData.update(_id:id,$inc:likes:counter).exec()
.then(result=>
res.status(200).json(message:'liked');
).
catch(err=>
res.status(500).json(error:err);
);
);

如果你发送 req.body.likes = 1 那么like字段的值增加1。

如果为负数,则递减。

【讨论】:

以上是关于喜欢按钮,在数据库上加减。 nodejs, mongodb, 猫鼬, jquery的主要内容,如果未能解决你的问题,请参考以下文章

如何用js进行日期的加减

如何修改timepicker的加减按钮

jquery问题购物车加减按钮

python日期加减比较问题请教

可定制的商品数量加减按钮

Woocommerce 3 中的自定义加减数量按钮