2016-07-11 3 views
0

아래 코드는 문서를 삭제하고 콜백의 두 번째 인수로 반환합니다. 이게 사실인가요? 인터넷에서 상충되는 정보가 많이 있습니다. 비슷한 접근 방식을 사용 했었지만 더 나은 접근 방식이 있다면 적응할 의향이 있습니다. 문서를 삭제하고 두 필드 (_idconversation)에 액세스해야합니다. 고마워, 나는 끊고 듣겠다. 더 구현 고유의 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.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}); }); }); 

그래서 예,이 컨트롤러 방법은 전송 업데이트는 방법이 아닌 콜백에 속하지 않는 :

다음은이 방법을 socket.io에서 사용하는 방법의 예입니다. 콜백은 개시 자만위한 것입니다. 아무것도.

답변

0

귀하의 방법 은요, 정확합니다하지만이 방법을 선호합니다. 더 논리적이고 순차적 인 것처럼 보입니다.

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, removed); 
    }); 
} 

function callback(err, msg) { 
    if (err) { 
     throw err; 
    } 
    io.to('convo_'+removed.conversation.toString()).emit('messaging.messageDeleted',{ message: removed._id.toString() }); 
} 

일단 콜백을 호출하면 이후에는 아무 것도 없어야한다고 생각합니다. 그렇지 않으면 콜백 함수와 포스트 콜백 실행을 추적하는 것이 정말 어려워집니다.

+0

이 메소드는 IRC에서 http로, apio.io에 이르기까지 api를 제공하는 모든 다른 프로토콜에서 액세스 할 수 있도록 추상 컨트롤러입니다.이 신비하고 모호한 콜백 매개 변수가있는 이유는 socket.io입니다. 이 경우 제어기가 자체 업데이트를 전송하는 책임이 있습니다. 콜백은 액션의 개시자가 컨트롤러로부터 응답을 받기위한 것입니다. – r3wt