2011-12-23 14 views
4

繼示例here並且遇到麻煩。Node.js w/socket.io:TypeError:Obj在新管理器中沒有方法'on'

npm install socket.io 安裝socketIO當我運行node server.js出現以下異常:

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Object #<Object> has no method 'on' 
    at new Manager (/Users/x/nodeprojects/cloudnode/node_modules/socket.io/lib/manager.js:97:10) 
    at Object.listen (/Users/x/nodeprojects/cloudnode/node_modules/socket.io/lib/socket.io.js:71:10) 
    at Object.<anonymous> (/Users/x/nodeprojects/cloudnode/sky/server.js:12:26) 
    at Module._compile (module.js:402:26) 
    at Object..js (module.js:408:10) 
    at Module.load (module.js:334:31) 
    at Function._load (module.js:293:12) 
    at Array.<anonymous> (module.js:421:10) 
    at EventEmitter._tickCallback (node.js:126:26) 

server.js:

var static = require('./plugins/node-static'); 
var socketIO = require('socket.io'); 
var clientFiles = new static.Server('./client'); 

var httpServer = require('http'); 
httpServer.createServer(function (request, response) { 
    request.addListener('end', function() { 
      clientFiles.serve(request, response); 
     }); 
}).listen(8253); 

var webSocket = socketIO.listen(httpServer); 
webSocket.on('connection', function(client) { 
    client.send('Please enter a user name ...'); 

    var userName; 
    client.on('message', function(message) { 
     if(!userName) { 
      userName = message; 
      webSocket.broadcast(message + ' has entered the zone.'); 
      return; 
     } 

     var broadcastMessage = userName + ': ' + message; 
     webSocket.broadcast(broadcastMessage); 
    }); 

    client.on('disconnect', function() { 
     var broadcastMessage = userName + ' has left the zone.'; 
     webSocket.broadcast(broadcastMessage); 
    }); 
}); 

我跑節點U 0.4.10 任何人都有一個解決方案的想法?

回答

9

您將http模塊傳遞給socket.io而不是http服務器。

var http = require('http'); 
var httpServer = http.createServer(function (request, response) { 
    request.addListener('end', function() { 
      clientFiles.serve(request, response); 
     }); 
}).listen(8253); 

var webSocket = socketIO.listen(httpServer); 
webSocket.on('connection', function(client) { 
+0

這是真的。但我改變了這一點,錯誤仍然是一樣的,它抱怨管理器對象! – 2011-12-24 07:03:46

+0

哦,我明白了。糾正了我的答案。 – fent 2011-12-24 10:17:18

相關問題