Ich mache möglicherweise einen Fehler, aber ich kann den Middleware-Fehler auf dem Client nicht erkennen. Hier ist der Servercode:
(function () {
'use strict';
var url = require("url"),
sio = require('socket.io')(3010);
//Authentification required
sio.use(function (socket, next) {
return next(new Error('refused client'));
});
}());
und Kundencode:
(function () {
"use strict";
//Network
var socket = io.connect(SOCKET_IO_SERVER);
socket.on('error', function(){
console.error(arguments);
});
}());
Also ist es ein Bug?
BEARBEITEN: Wenn ich den Netzwerk-Tab auf Chrome verwende, sehe ich eine polling
-Anfrage, die "zurückgewiesener Client" enthält.
Niemand?
Wir können Ihr Beispiel nicht ausführen. Besser wäre es, einen fehlgeschlagenen Test oder ein Repo mit einem Beispiel bereitzustellen, das wir einfach ausführen können, um den Fehler zu sehen. Hier gibt es zu viele andere Faktoren, die dies beeinflussen könnten.
Welche Schritte haben Sie unternommen, um Ihr Problem zu beheben?
+1
Der Fehlerrückruf wird auf der Clientseite nicht aufgerufen, wenn der Fehler als Parameter an die nächste Middleware übergeben wird.
Bearbeiten
Ich habe festgestellt, dass bei der Verwendung von Namespaces die Middleware an den Namespace angehängt werden sollte:
var nsp = io.of('/namespace');
// client never receives the error event
io.use(function (socket, next) {
return next(new Error('refused client'));
});
// this way works
nsp.use(function (socket, next) {
return next(new Error('refused client'));
});
@oliveiragabriel07 danke, das scheint genau das Problem zu sein, der Client wird tatsächlich abgelehnt, erhält aber den Fehler nicht.
Ich habe ein kleines Repo mit einer funktionierenden Ausnahme https://github.com/Korri/socket.io-issue688 erstellt
Ich kann Middleware-Fehler im Client in socket.io 1.0 mit dem Ereignishandler „Fehler“ abfangen.
Ich habe das gleiche Problem bei der Verwendung von Namespaces. Die Lösung @oliveiragabriel07 hat auch für mich funktioniert, aber ich denke, der Client sollte in der Lage sein, einen Fehler zu erhalten, der in der allgemeinen Verbindungs-Middelware ( io.use ) ausgelöst wird. Ich denke, dies ist ein Socket.io-Serverproblem
Ich stimme @jbaez zu.
Um den Fehler abzufangen, müssen Sie nach next () zurückkehren. Ich denke, das ist auch ein Fehler in express.js.
solltest du so haben:
io.use(function (socket, next) {
next(new Error('refused client'));
return;
});
das ist nicht gut
io.use(function (socket, next) {
return next(new Error('refused client'));
});
Hilfreichster Kommentar
Ich habe das gleiche Problem bei der Verwendung von Namespaces. Die Lösung @oliveiragabriel07 hat auch für mich funktioniert, aber ich denke, der Client sollte in der Lage sein, einen Fehler zu erhalten, der in der allgemeinen Verbindungs-Middelware ( io.use ) ausgelöst wird. Ich denke, dies ist ein Socket.io-Serverproblem