In meinem Verständnis wird der folgende Code das Dokument löschen und es auch als zweites Argument für den Rückruf zurückgeben. Ist das wahr? Ich finde viele widersprüchliche Informationen im Internet. Ich habe einen ähnlichen Ansatz verwendet, aber wenn es einen besseren Ansatz gibt, bin ich bereit, das anzupassen. Ich muss das Dokument löschen und auch auf zwei seiner Felder zugreifen: _id
und conversation
respektvoll. Danke, ich werde auflegen und zuhören.Verwirrung über findOne() und 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() });
});
},
Um zu klären Dies ist eine abstrakte Controller-Schnittstelle für weitere Implementierung spezifische APIs. im Grunde normalisiert es diesen Vorgang über alle Protokolle, die wir unterstützen oder in Zukunft unterstützen werden.
Hier ist ein Beispiel dafür, wie diese Methode von socket.io verwendet wird:
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});
});
});
so ja, alle Aktualisierungen dieser Controller-Methode sendet in dem Verfahren gehören und nicht in den Rückruf. Der Rückruf ist nur für den Initiator. nichts anderes.
Die Methode ist ein abstrakter Controller, um diese Methode von allen verschiedenen Protokollen zugänglich zu machen, von denen wir unsere API bereitstellen. Das reicht von IRC über http bis socket.io, deshalb gibt es diesen mysteriösen und vagen Callback-Parameter. in diesem Fall ist der Controller selbst dafür verantwortlich, die Updates zu versenden. Der Rückruf ist für den Initiator der Aktion, um eine Antwort von der Steuerung zu erhalten. – r3wt