Веб-сайт имеет функцию «нравится / не нравится» в сообщении, и каждый раз, когда пользователь нажимает на него, он обновляет документ публикации и добавляет понравившуюся запись в понравившиеся ему сообщения. Проблема заключается в том, что когда пользователь рассылает спам «нравится / не нравится», это приведет к странному поведению в отношении приращений и уменьшений. Например: пост с 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>');
})