node.js - rooms - socket.io reconnect
SocketIo.use(function(socket, next))-¿A dónde va después, cómo atraparlo o recibirlo? (1)
Encontré un ejemplo del uso de socket.IO 1. * width Express 4. Aquí hay un enlace
Everyting funciona perfectamente. Pero hay un código:
io.use(function(socket, next) {
try {
var data = socket.handshake || socket.request;
if (! data.headers.cookie) {
return next(new Error(''Missing cookie headers''));
}
console.log(''cookie header ( %s )'', JSON.stringify(data.headers.cookie));
var cookies = cookie.parse(data.headers.cookie);
console.log(''cookies parsed ( %s )'', JSON.stringify(cookies));
if (! cookies[COOKIE_NAME]) {
return next(new Error(''Missing cookie '' + COOKIE_NAME));
}
var sid = cookieParser.signedCookie(cookies[COOKIE_NAME], COOKIE_SECRET);
if (! sid) {
return next(new Error(''Cookie signature is not valid''));
}
console.log(''session ID ( %s )'', sid);
data.sid = sid;
sessionStore.get(sid, function(err, session) {
if (err) return next(err);
if (! session) return next(new Error(''session not found''));
data.session = session;
next();
});
} catch (err) {
console.error(err.stack);
next(new Error(''Internal server error''));
}
});
Entonces, si hay un error, pasa al next
. ¿Pero a dónde va esto ahora? Cómo manejar este error sin intentar, atrapar. Me refiero a manejar donde está recibiendo el siguiente en forma expresa:
// something here
// And this is callback function which accepts next with err
functin(err, anythingHere){
if err
throw err;
else
// some code here
}
Va al cliente.
http://socket.io/docs/server-api/#namespace#use(fn:function):namespace
var io = require(''socket.io'')(); io.use(function(socket, next){ if (socket.request.headers.cookie) return next(); next(new Error(''Authentication error'')); });
Los errores pasados a las devoluciones de llamada de middleware se envían como paquetes de
error
especiales a los clientes.
Tenga en cuenta que los middlewares que lo siguen no son invocados.
En el lado del cliente puedes manejarlo así:
socket.on(''error'', function(err){
// do something with err
});