2014-01-13 26 views
0

仍然是一個小菜一碟,但我試圖建立一個簡單的實時聊天系統。Socket.io對象沒有套接字(未定義)

這裏是我的主要代碼

var express = require('express'); 
var http = require('http'); 
var fs = require('fs'); //to read contents of client.html 
var io = require('socket.io'); 
// var sanitize = require('validator').sanitize; 


var port = 1337; 




var app = express(); 

app.use(express.logger('dev')); 

app.get('/', function (request, response){ 
    response.writeHead(200, {'Content-Type': 'text/html'}); 
    fs.readFile("client.html", 'utf-8', function (error, data) { 
     response.end(data); 
    }); 
}); 

var server = app.listen(port); 
io.listen(server); 

io.sockets.on('connection', function (socket) { 
    socket.on('message_to_server', function (data) { 
     // var sanitizedMessage = sanitize(data["message"]).escape(); 
     var sanitizedMessage = data["message"]; 
     io.sockets.emit("message_to_client", {message: sanitizedMessage}); 
    }); 
}); 

,當我運行它,它給了我

io.sockets.on('connection', function (socket) { 
     ^
TypeError: Cannot call method 'on' of undefined 

果然我插在調試器node debug main.js,當我檢查的io價值似乎像一切都在那裏除了sockets

我搞砸了很多,發現io僅在使用fs來讀取我的中間件中的文件時丟失sockets

我中間件因此,如果更改爲:

app.get('/', function (request, response){ 
    response.writeHead(200, {'Content-Type': 'text/html'}); 
    response.end('this works'); 
}); 

然後iosockets,這使我相信,這是一個時間問題。

任何幫助將非常感激。乾杯

回答

3

存在於require('socket.io').listen函數的返回值sockets屬性,而不是在require('socket.io')結果本身。因此,你應該這樣做:

var server = app.listen(port); 
var io = require('socket.io').listen(server); 

io.sockets.on(...); 
+0

謝謝!!!它究竟返回了什麼? – vvMINOvv

相關問題