Podría estar cometiendo un error, pero no puedo detectar el error de middleware en el cliente, aquí está el código del 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'));
});
}());
y código de cliente:
(function () {
"use strict";
//Network
var socket = io.connect(SOCKET_IO_SERVER);
socket.on('error', function(){
console.error(arguments);
});
}());
Entonces, ¿es un error?
EDITAR: al usar la pestaña de red en Chrome, veo una solicitud polling
que contiene "cliente rechazado"
¿Ninguno?
No podemos ejecutar su ejemplo. Lo mejor sería proporcionar una prueba fallida o un repositorio con un ejemplo que podamos ejecutar para ver la falla. Hay demasiados otros factores aquí que podrían influir en esto.
¿Qué pasos ha tomado para depurar su problema?
+1
La devolución de llamada de error no se llama en el lado del cliente cuando se pasa el error como parámetro al siguiente en el middleware.
Editar
Descubrí que al usar espacios de nombres, el middleware debe adjuntarse al espacio de nombres:
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 gracias, ese parece ser el problema exacto, el cliente en realidad es rechazado, pero no recibe el error.
Creé un pequeño repositorio con una excepción de trabajo https://github.com/Korri/socket.io-issue688
Puedo detectar errores de middleware en el cliente en socket.io 1.0 con el controlador de eventos 'error'.
Tengo el mismo problema cuando uso espacios de nombres. La solución de @oliveiragabriel07 también funcionó para mí, pero creo que el cliente debería poder recibir un error en el middelware de conexión general (io.use). Supongo que se trata de un problema del servidor socket.io.
Estoy de acuerdo con @jbaez.
para detectar el error, necesita volver después de next(). Creo que esto también es un error en express.js.
deberías tener así:
io.use(function (socket, next) {
next(new Error('refused client'));
return;
});
esto no está bien
io.use(function (socket, next) {
return next(new Error('refused client'));
});
Comentario más útil
Tengo el mismo problema cuando uso espacios de nombres. La solución de @oliveiragabriel07 también funcionó para mí, pero creo que el cliente debería poder recibir un error en el middelware de conexión general (io.use). Supongo que se trata de un problema del servidor socket.io.