2016-06-29 5 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

サーバはそうそこに、全体の代わりにErrorオブジェクトのエラーメッセージ(「認証エラー」)を放出するかのようにそれが表示されますエラーの他のプロパティにアクセスする方法はありません。しかし、これが無関係な問題であるかどうかはわかりません。 – user2901933

+1

現在のバージョンの 'socket.io'(1.4.8)でうまく動作しているようです。 [ここで要点](https://gist.github.com/robertklep/a8adbdf15a210ac432e4cc1a75d912bf)には、私がテストしたコードがあります。私は 'err.data'を使う必要があると信じていますが、' err.type'や何かのようなランダムなプロパティではないと思います。 – robertklep