2015-01-10 7 views
7

Ho trovato un esempio di utilizzo di socket.IO 1. * larghezza Express 4. Ecco un linkSocketIo.use (funzione (socket, next)) - Dove va dopo, come catturarlo o riceverlo?

Tutto perfetto. Ma v'è un codice:

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

Quindi, se si verifica un errore, si passa a next. Ma dove va questo dopo? Come gestire questo errore senza provare, cattura. Intendo dire gestire il prossimo ricevimento come in espresso:

// something here 
// And this is callback function which accepts next with err 
functin(err, anythingHere){ 
    if err 
     throw err; 
    else 
     // some code here 
} 

risposta

16

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

errori passati al middleware callback vengono inviati come speciali pacchetti error ai clienti.

Si noti che non viene richiamato alcun middleware successivo.

Sul lato client è possibile gestire poi in questo modo:

socket.on('error', function(err){ 
    // do something with err 
}); 
+0

Grazie signore, ti ha aiutato – onar