mon goose нравится / не похоже на странное поведение с приращениями - PullRequest
0 голосов
/ 26 апреля 2020

Веб-сайт имеет функцию «нравится / не нравится» в сообщении, и каждый раз, когда пользователь нажимает на него, он обновляет документ публикации и добавляет понравившуюся запись в понравившиеся ему сообщения. Проблема заключается в том, что когда пользователь рассылает спам «нравится / не нравится», это приведет к странному поведению в отношении приращений и уменьшений. Например: пост с 1 лайком приведет к -1 лайку. Кажется, что веб-интерфейс jquery, обновляющий представление, также имеет ту же проблему, несмотря на то, что он не получает значение «лайки» напрямую из базы данных.

контроллер. js:

likePost: function(req, res) {
    let username = req.query.username;
    let postId = req.query.postId;

    helper.likePost(postId, username)
},

unlikePost: function(req, res) {
    let username = req.query.username;
    let postId = req.query.postId;

    helper.unlikePost(postId, username);
}

помощник. js

likePost: function(postId, username) {
    database.updateOne(Post, {_id: postId}, {$inc: {numberOfMeowts: 1}}, (flag) => {

    })
    database.updateOne(User, {username: username}, {$addToSet: {meowtedPosts: postId}}, (userFlag) => {
        console.log(userFlag)
    })
},

unlikePost: function(postId, username) {
    database.updateOne(Post, {_id: postId}, {$inc: {numberOfMeowts: -1}}, (flag) => {

    })
    database.updateOne(User, {username: username}, {$pull: {meowtedPosts: postId}}, (userFlag) => {
        console.log(userFlag)
    })

скрипт. js

$('.card-body').on('click', '#like-btn', function() {
    //not sure if sessions is on server or client side but i'll just put checkers on both sides just in case
    let username = 'default';
    let postId = $('#postId').text();

    let numberOfMeowts = parseInt($('#numberOfMeowts').text()) + 1;

    $.get('/likePost', {username: username, postId: postId}, (data) => {});

    $('#like-btn').replaceWith(
        "<button id='unlike-btn' type='button' class='btn btn-danger'> <i class='fas fa-heart-broken'></i> </button>"
    );

    $('.card-body span').html('Meowted by <b>' + numberOfMeowts + '</b>');

})

$('.card-body').on('click', '#unlike-btn', function() {

    //not sure if sessions is on server or client side but i'll just put checkers on both sides just in case
    let username = 'default';
    let postId = $('#postId').text();

    let numberOfMeowts = parseInt($('#numberOfMeowts').text()) - 1;

    $.get('/unlikePost', {username: username, postId: postId}, (data) => {});


    $('#unlike-btn').replaceWith(
        "<button id='like-btn' type='button' class='btn btn-outline-danger'> <i class='fas fa-heart'></i> </button>"
    );

    $('.card-body span').html('Meowted by <b>' + numberOfMeowts + '</b>');

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...