SocketIo.use(function(socket,next)) - 接下来的地方,如何捕获或接收它?

ona*_*nar 9 sockets node.js socket.io socket.io-1.0

我找到了使用socket.IO 1.*width Express 4的例子.这是一个链接

一切都很完美.但是有一个代码:

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'));
}
});
Run Code Online (Sandbox Code Playgroud)

因此,如果有错误,则传递给next.但接下来呢?如何在没有try,catch的情况下处理此错误.我的意思是处理下一个接收的地方,如快递:

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

lag*_*lex 21

它转到了客户端.

https://socket.io/docs/server-api/#socket-use-fn

传递给中间件回调的错误作为特殊error数据包发送给客户端.

io.on('connection', (socket) => {
  socket.use((packet, next) => {
    if (packet.doge === true) return next();
    next(new Error('Not a doge error'));
  });
});
Run Code Online (Sandbox Code Playgroud)

请注意,不会调用其后的任何中间件.

在客户端,您可以像这样处理:

socket.on('error', function(err){
    // do something with err
});
Run Code Online (Sandbox Code Playgroud)