2014-12-05 56 views
0

我正在试图对其s 0123的简单令牌授权,如docs中所述。但是,节点抛出:无法配置Socketio:TypeError:对象#<Server>没有方法'configure'

TypeError: Object #<Server> has no method 'configure' 

当我尝试用io.configure配置socketio。任何想法为什么配置方法不可用?

var express = require('express') 
    , app = express() 
    , server = require('http').Server(app) 
    , io = require('socket.io')(server) 

io.configure(function(){ 
    io.set('authorization', function (handshakeData, callback) { 
    ... 
}) 

完整堆栈跟踪:

/Users/administrator/dev/chat-example/lib/io.js:9 
    io.configure(function(){ 
    ^
TypeError: Object #<Server> has no method 'configure' 
    at module.exports (/Users/administrator/dev/chat-example/lib/io.js:9:6) 
    at Object.<anonymous> (/Users/administrator/dev/chat-example/app.js:4:29) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:906:3 
+2

该文档显然不是与'io.configure()'相关的最新版本。 Socket.IO 0.9及更早版本的方法[已定义](https://github.com/Automattic/socket.io/blob/0.9.17/lib/manager.js#L266-L274),但[[似乎有]已被删除](https://github.com/Automattic/socket.io/blob/1.0.0/lib/index.js)在重写为1.0和更高版本。 – 2014-12-05 20:37:28

+0

@JonathanLonowski这是一个耻辱,任何想法如何配置socketio呢? – agconti 2014-12-05 20:38:40

+0

['io.use()'](http://socket.io/docs/server-api/#namespace#use(fn:function):namespace)将允许您添加自定义中间件,如检查授权。而且,'io.set()'[still exists](https://github.com/Automattic/socket.io/blob/1.2.1/lib/index.js#L109-L135),显然只是为了兼容。它的定义显示了一个使用'io.use()'的例子。 – 2014-12-05 20:47:36

回答

6

io.configure和io.set被弃用。这里是一个示例中间件socket.io 1.x

io.use(function(socket, next) { 
    var handshake = socket.request; 

    if (!handshake) { 
     return next(new Error('[[error:not-authorized]]')); 
    } 

    cookieParser(handshake, {}, function(err) { 
     if (err) { 
      return next(err); 
     } 

     var sessionID = handshake.signedCookies['express.sid']; 

     db.sessionStore.get(sessionID, function(err, sessionData) { 
      if (err) { 
       return next(err); 
      } 
      console.log(sessionData); 

      next(); 
     }); 
    }); 
}); 
相关问题