Socket.io-client: Middleware-Fehler wird nicht abgefangen

Erstellt am 5. Juni 2014  ·  8Kommentare  ·  Quelle: socketio/socket.io-client

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.

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

Alle 8 Kommentare

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'));
});
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen