2015-01-10 4 views
7

I Beispiel für die Verwendung socket.IO 1. * Breite Express 4. Hier ist eine linkSocketIo.use (Funktion (Socket, next)) - Wohin geht die nächste, wie man es fängt oder erhält?

Every funktioniert perfekt gefunden. Aber es gibt einen Code:

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

Also, wenn es ein Fehler ist, es geht auf next. Aber wohin geht das als nächstes? Wie man diesen Fehler behandelt, ohne zu versuchen, zu fangen. Ich meine Handle, wo diese nächste wie in Express empfängt:

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

Antwort

16

Es geht an den Client.

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

bestanden Fehler Rückrufe Middleware werden als spezielle error Pakete an Clients gesendet.

Beachten Sie, dass alle darauf folgenden Middlewares nicht aufgerufen werden.

Auf der Client-Seite, die Sie dann wie so handhaben kann:

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

Danke Sir, Sie geholfen – onar