Socket.io-client: L'erreur du middleware n'est pas détectée

Créé le 5 juin 2014  ·  8Commentaires  ·  Source: socketio/socket.io-client

Je fais peut-être une erreur, mais je n'arrive pas à détecter l'erreur du middleware sur le client, voici le code du serveur :

(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'));
    });
}());

et code client :

(function () {
    "use strict";

    //Network
    var socket = io.connect(SOCKET_IO_SERVER);

    socket.on('error', function(){
        console.error(arguments);
    });
}());

Alors est-ce un bug ?

EDIT: En utilisant l'onglet réseau sur chrome, je vois une requête polling contenant "client refusé"

Commentaire le plus utile

J'ai le même problème lors de l'utilisation d'espaces de noms. La solution @ oliveiragabriel07 a également fonctionné pour moi, mais je pense que le client devrait pouvoir recevoir une erreur générée dans le middelware de connexion général ( io.use ) Je suppose qu'il s'agit d'un problème de serveur socket.io

Tous les 8 commentaires

Personne?

Nous ne pouvons pas exécuter votre exemple. La meilleure chose à faire serait de fournir un test défaillant ou un dépôt avec un exemple que nous pouvons simplement exécuter pour voir l'échec. Il y a trop d'autres facteurs ici qui pourraient influencer cela.

Quelles étapes avez-vous suivies pour déboguer votre problème ?

+1
Le rappel d'erreur n'est pas appelé côté client lorsque Error est passé en paramètre à next sur le middleware.

Éditer

J'ai trouvé que lors de l'utilisation d'espaces de noms, le middleware doit être attaché à l'espace de noms :

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 merci, cela semble être le problème exact, le client est en fait refusé, mais ne reçoit pas l'erreur.

J'ai créé un petit repo avec une exception de travail https://github.com/Korri/socket.io-issue688

Je suis capable de détecter les erreurs de middleware dans le client dans socket.io 1.0 avec le gestionnaire d'événements 'error'.

J'ai le même problème lors de l'utilisation d'espaces de noms. La solution @ oliveiragabriel07 a également fonctionné pour moi, mais je pense que le client devrait pouvoir recevoir une erreur générée dans le middelware de connexion général ( io.use ) Je suppose qu'il s'agit d'un problème de serveur socket.io

Je suis d'accord avec @jbaez.

pour attraper l'erreur, vous devez revenir après next(). Je pense que c'est aussi un bogue dans express.js.
tu devrais avoir comme ça :

io.use(function (socket, next) {
       next(new Error('refused client')); 
       return;
});

ce n'est pas bien

io.use(function (socket, next) {
       return next(new Error('refused client'));
});
Cette page vous a été utile?
0 / 5 - 0 notes