2015-01-10 13 views
7

Tôi đã tìm thấy ví dụ về việc sử dụng socket.IO 1. * width Express 4. Đây là một linkSocketIo.use (chức năng (ổ cắm, tiếp theo)) - Đi đâu tiếp theo, cách bắt hoặc nhận nó?

Everyting hoạt động hoàn hảo. Nhưng có một mã số:

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

Vì vậy, nếu có một lỗi, nó đi để next. Nhưng đi đâu tiếp theo? Làm thế nào để xử lý lỗi này mà không cần cố gắng, bắt. Tôi có nghĩa là xử lý nơi tiếp theo này đang nhận được như trong thể hiện:

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

Trả lời

16

Nó đi cho khách hàng.

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

lỗi truyền cho middleware callbacks được gửi dưới dạng đặc biệt error gói cho khách hàng.

Lưu ý rằng bất kỳ phần mềm trung gian nào sau đây không được gọi.

Trên client-side bạn có thể xử lý sau đó như vậy:

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

Cảm ơn bạn sir, Bạn giúp – onar

Các vấn đề liên quan