Socket.io-client: El error de middleware no se detecta

Creado en 5 jun. 2014  ·  8Comentarios  ·  Fuente: socketio/socket.io-client

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"

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.

Todos 8 comentarios

¿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'));
});
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

aravindsrivats picture aravindsrivats  ·  4Comentarios

gtk2k picture gtk2k  ·  3Comentarios

najibghadri picture najibghadri  ·  7Comentarios

patrickbussmann picture patrickbussmann  ·  6Comentarios

zappfinger picture zappfinger  ·  5Comentarios