2014-12-05 53 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(); 
     }); 
    }); 
}); 
相關問題