2016-06-29 2 views
1

Socket.IO를 사용하면 미들웨어 기능이 오류를 전달할 수 있습니다.사용자 정의 Socket.IO 미들웨어 오류 이벤트?

var io = require('socket.io')(); 
io.use(function(socket, next){ 
    if (socket.request.headers.cookie) return next(); 
    next(new Error('Authentication error')); 
}); 

클라이언트는 기본 '오류'이벤트를 수신하여 이러한 오류를들을 수 있습니다.

clientIO.on('error', function(err) { 
    console.log(err); 
} 

Socket.IO 미들웨어를 할 수있는 방법이 대신 '오류'의 사용자 정의 이벤트 이름을 방출 (예를 들면, 'authentication_error')?

답변

2

코드 기반에서 보았던 것처럼 보이지 않습니다. 오류 메시지는 클라이언트의 error 이벤트를 트리거하는 특수 패킷 유형을 통해 전송되므로 다른 유형으로 대체 할 수있는 일반 메시지는 아닙니다.

당신은 비록 오류로 데이터를 전달할 수있는 옵션을 가지고 수행

// server 
io.use(function(socket, next){ 
    if (socket.request.headers.cookie) return next(); 
    let err = new Error('Authentication error'); 
    err.data = { type : 'authentication_error' }; 
    next(err); 
}); 

// client 
clientIO.on('error', function(err) { 
    if (err.type === 'authentication_error') { 
    ... 
    } else { 
    ... 
    } 
} 
+1

서버가 오류 메시지가 ("인증 오류")를 방출 것처럼 나타나는 대신 전체 오류 개체의, 그래서 거기에 오류의 다른 속성에 액세스 할 수 없습니다. 그러나 이것이 관련이없는 문제인지 아닌지는 확실하지 않습니다. – user2901933

+1

'socket.io' (1.4.8)의 현재 버전으로 저에게 잘 작동하는 것 같습니다. [다음은 요점입니다] (https://gist.github.com/robertklep/a8adbdf15a210ac432e4cc1a75d912bf)와 함께 테스트 한 코드. 나는 당신이'err.data'를 사용할 필요가 있다고 믿고,'err.type' 또는 무언가와 같은 임의의 속성이 아니라고 믿습니다. – robertklep