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