Я строю систему управления списком друзей с Meteor.js.Метеор: обновление коллекции сбой
Для этого у меня есть список пользователей, на которых я могу щелкнуть, чтобы пригласить их в список моих друзей.
Вот мой код. Я получаю другой пользователь _id и profile.name, соответственно, в e.target.id и e.target.name.
Template.talkers.events({
"click .addTalker": function(e, tmpl){
/* Checking if there already is a pending request */
var bool = false;
for(var i = 0; i < Meteor.user().profile.friends.length; i++){
if(Meteor.user().profile.friends[i].id == id){
bool = false;
}else{
bool = true;
break;
}
}
/* If there isn't */
if(!bool){
/* I add the other user in my friend list with a pending status */
Meteor.users.update({_id: Meteor.userId()}, {
$push: {'profile.friends': {
id: e.target.id,
status: 0
}
}
});
/* Then, I add the request on the other user profile */
Meteor.users.update({_id: e.target.id}, {
$set: {'profile.friends': {
id: Meteor.userId(),
status: 2
}
}
});
/* And I create a new notification for the other user */
var notifId = Meteor.users.findOne({_id: e.target.id}).profile.notifications.length;
console.log(notifId + 1);
Meteor.users.update({_id: e.target.id}, {
$push: {'profile.notifications': {
id: (notifId + 1),
type: 1,
img: null,
link: "/profile"},
}
});
alert("An invitation has been sent to " + e.target.name)
}
}
});
}
Проблема заключается в том, что, если я правильно добавить другого пользователя в список друзей, с ожидающим статусом, я получаю ту же ошибку бросили два раза за два обновления на другого пользователя. На данный момент я публикую _id и некоторые данные из профиля всех пользователей клиенту. Я предполагаю, что проблема связана с тем, что я не могу переопределить другой профиль пользователя от клиента, но только для его чтения. Тогда, я думаю, я должен сделать это на стороне сервера с вызовом метода?
Можете ли вы подтвердить мою проблему или объяснить мне, как действовать дальше?
Спасибо Вам
Тогда я собираюсь сделать это на стороне сервера. Но, мне любопытно: есть ли преимущество, позволяющее пользователям делать это на стороне сервера? Что-то программирующее? Или их нет? Даже для других коллекций, чем пользователи(), например, почему я предпочитаю, чтобы мои пользователи меняли коллекцию аватаров, загружая изображения, а не передавая их серверной стороне, чтобы сделать то же самое более безопасным способом? На мой вопрос, я думаю, ответ: разрешение действий стороне клиента позволяет разделить работу и разрешить серверу «отдыхать» или, по крайней мере, работать меньше. Но это была бы единственная цель? –
Я предполагаю, что если вы используете это приложение только с доверчивыми людьми (то есть: друзьями), то разрешая клиентам обновлять других пользователей, он делает код более чистым и не добавляет сложности: ваша логика не разделяется между файлами сервера и клиента, вы вам не нужно дважды проверять исключения ... Также я думаю, что он должен * работать лучше, так как у вас есть только одна функция асинхронизации ... (которая по-прежнему запрашивает сервер, конечно) – SylvainB
Спасибо вам за помощь! –