私の理解では、以下のコードはドキュメントを削除し、それをコールバックの2番目の引数として返します。これは本当ですか?私はインターネット上で矛盾する情報をたくさん見つけています。私は前に同様のアプローチを使用しましたが、より良いアプローチがあればそれを適応させていきます。私はその文書を削除し、そのフィールドのうちの2つ、すなわち_id
とconversation
にもアクセスする必要があります。ありがとう、私はハングアップし、聞くよ。以上の実装固有のAPIによって使用されるためを明確にfindOne()と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() });
});
},
これは、抽象コントローラインタフェースです。基本的には、私たちがサポートしているか、将来サポートするプロトコルでこの操作を正規化します。ここで
は、このメソッドは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});
});
});
ので、はい、すべての更新このコントローラのメソッドは、メソッドではなく、コールバックに属してください送信します。コールバックはイニシエータに対してのみ行われます。他には何もない。
このメソッドは、私たちがapiを提供するさまざまなプロトコル(IRCからhttp、socket.ioまで)にアクセスできるようにするための抽象的なコントローラです。なぜなら、この不思議で曖昧なコールバックパラメータがあるからです。この場合、コントローラは更新を送信するために自己責任を負います。コールバックは、アクションのイニシエータがコントローラからの応答を受け取るためのものです。 – r3wt