Socket.io-client: Erro de middleware não é capturado

Criado em 5 jun. 2014  ·  8Comentários  ·  Fonte: socketio/socket.io-client

Posso estar cometendo um erro, mas não consigo capturar o erro de middleware no cliente, aqui está o código do servidor:

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

e código do cliente:

(function () {
    "use strict";

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

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

Então é um bug?

EDIT: Usando a guia de rede no chrome, vejo uma solicitação polling contendo "cliente recusado"

Comentários muito úteis

Eu tenho o mesmo problema ao usar namespaces. A solução @oliveiragabriel07 funcionou para mim também, mas acho que o cliente deve receber um erro gerado no middelware de conexão geral ( io.use ) Acho que isso é um problema do servidor socket.io

Todos 8 comentários

Ninguém?

Não podemos executar seu exemplo. A melhor coisa a fazer seria fornecer um teste com falha ou um repositório com um exemplo que podemos executar para ver a falha. Há muitos outros fatores aqui que podem influenciar isso.

Quais etapas você executou para depurar seu problema?

+1
Error callback não está sendo chamado no lado do cliente quando Error é passado como parâmetro para next no middleware.

Editar

Descobri que ao usar namespaces, o middleware deve ser anexado ao namespace:

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 obrigado, esse parece ser o problema exato, o cliente é realmente recusado, mas não recebe o erro.

Eu criei um pequeno repositório com uma exceção de trabalho https://github.com/Korri/socket.io-issue688

Eu sou capaz de capturar erros de middleware no cliente no socket.io 1.0 com o manipulador de eventos 'error'.

Eu tenho o mesmo problema ao usar namespaces. A solução @oliveiragabriel07 funcionou para mim também, mas acho que o cliente deve receber um erro gerado no middelware de conexão geral ( io.use ) Acho que isso é um problema do servidor socket.io

Concordo com @jbaez.

para pegar o erro, você precisa retornar após next(). eu acho que isso é bug no express.js também.
você deve ter assim:

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

isto não é bom

io.use(function (socket, next) {
       return next(new Error('refused client'));
});
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

patrickbussmann picture patrickbussmann  ·  6Comentários

exilonX picture exilonX  ·  7Comentários

catamphetamine picture catamphetamine  ·  3Comentários

zappfinger picture zappfinger  ·  5Comentários

Sairyss picture Sairyss  ·  4Comentários