5

node.js で socket.io を実行し、Apache Web サイトで socket.io クライアントを実行しています。node.js サーバーを起動せずにクライアント ページをロードすると、エラー イベントがトリガーされ、空のエラー メッセージが表示され、次のコンソール出力が生成されます。

GET http://example.com:1337/socket.io/1/?t=1359731838906  socket.io.js:1659
Socket.handshake socket.io.js:1659
Socket.connect socket.io.js:1699
Socket socket.io.js:1551
io.connect socket.io.js:94
(anonymous function) general.js:7
(anonymous function)

このエラーがコンソールに書き込まれないようにするにはどうすればよいですか?

4

4 に答える 4

14

コンソールに表示されないという意味でこれらのエラーを「キャッチ」することはできませんが、ソケットをリッスンし'connect_error''connect_failed'直接'disconnect'処理するか、次のようなカスタム関数にリダイレクトすることで、エラーに対処することができhandleErrors()ます。

const socket = io.connect(url, { reconnection: false })
socket.on('update', data => console.log(data))

socket.on('connect_error', err => handleErrors(err))
socket.on('connect_failed', err => handleErrors(err))
socket.on('disconnect', err => handleErrors(err))
于 2019-08-18T21:00:13.823 に答える
6

このエラーを隠す唯一の方法はio.connect、最初から呼び出しを行わないことです。これは、もちろん、サーバーが稼働していてもアプリのソケット関数が機能しないことを意味します。

表示されているエラー メッセージは、socket.io 自体によって ( 経由でconsole.error()) そこに配置されたものでも、キャッチされていない JS 例外でもないことを理解することが重要です。

エラー メッセージは、ブラウザの XHR オブジェクト自体によってコンソールに表示されます。XHR リクエストが失敗したことを示しています (サーバーが実行されていないため)。スタック トレースは、どのコードが XHR リクエストを開始したかを示しています。実際の例外のトレースではありません。

socket.ioはサーバーにリクエストを送信する必要があるため、サーバーが応答しない場合にコンソールにエラー メッセージが表示されないようにする方法はありません。

于 2013-02-01T17:18:04.050 に答える
1

試す

socket.on('connect_failed', function(){
    console.log('Connection Failed');
});

これはテストされていません。ここで見つけましたNode.js socket.io-client connect_failed / connect_error event

于 2013-02-01T16:04:03.457 に答える