D'après ce que je comprends, le code ci-dessous va supprimer le document et le retourner comme deuxième argument au rappel. Est-ce vrai? Je trouve beaucoup d'informations contradictoires sur internet. J'ai déjà utilisé une approche similaire, mais s'il y a une meilleure approche, je suis prêt à l'adapter. Je dois supprimer le document et accéder à deux de ses champs: _id
et conversation
respectueusement. merci, je vais raccrocher et écouter.confusion à propos de findOne() et remove()
deleteMessage: function(userId,messageId,callback){
model.Message.findOne({_id: messageId, user: userId}).remove().exec(function(err,removed){
// removed should be the deleted document or some falsey value
if(err || !removed){
return callback('Invalid messageId or user does not have permission to delete this message',null);
}
callback(null,'Message Deleted');//success
//we have access to the removed document, so we can get the conversation id easily and emit to the users.
io.to('convo_'+removed.conversation.toString()).emit('messaging.messageDeleted',{ message: removed._id.toString() });
});
},
Pour clarifier Ceci est une interface de commande abstraite pour utilisé par apis plus spécifiques de mise en œuvre. Fondamentalement, il normalise cette opération sur tous les protocoles que nous soutenons ou que nous soutiendrons dans le futur.
Voici un exemple de la façon dont cette méthode est utilisée à partir socket.io:
socket.on('messaging.deleteMessage',function(data){
var mid = data.message || false;
MessagingAPI.deleteMessage(user.id,mid,function(err,results){
socket.emit('messaging.deleteMessage',{error:err,results: results});
});
});
donc oui, toute mise à jour de cette méthode du contrôleur envoie n'appartiennent à la méthode et non dans le rappel. le rappel est seulement pour l'initiateur. rien d'autre.
la méthode est un contrôleur abstrait pour rendre cette méthode accessible par tous les différents protocoles que nous fournissons à notre API allant de IRC à http, à socket.io thats pourquoi il y a ce paramètre de rappel mystérieux et vague. dans ce cas, c'est le contrôleur lui-même responsable de l'envoi des mises à jour. le rappel est pour l'initiateur de l'action pour recevoir une réponse du contrôleur. – r3wt