2012-08-07 102 views
1

我不知道爲什麼這不起作用:爲什麼下面的nodejs代碼不適用於socketio + express 3?

我有一個包含sample.js:

var http = require('http'); 
var socket = require('socket.io'); 
var express = require('express'); 

var app = express(); 
var server = http.createServer(app); 
var io = socket.listen(server); 

io.sockets.on('connection', function(client) { 
    console.log('Client Connected...'); 

    client.emit('messages', {hello: 'world'}); 
}); 

server.listen(8080); 

我有一個包含一個index.html頁:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="socket.io.js"></script> 

     <script> 
      var server = io.connect('http://mydomain:8080'); 
      server.on('messages', function(data) { 
       alert(data.hello); 
      });   
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

更新:當使用socket.io-client.js庫時,當我進入http://mydomain:8080頁面時,我得到一個「信息 - 未處理的socket.io url」

有人能指出我可能做錯了什麼嗎?

+0

您確定瀏覽器控制檯中沒有錯誤嗎? Socket.IO客戶端代碼通常在'/ socket.io/socket.io.js'處提供。 – scttnlsn 2012-08-07 02:54:55

+0

我的java代碼沒有錯誤,我將socket.io.js移到了我的應用程序目錄的根目錄。將其更改爲似乎也不起作用。 – Rolando 2012-08-07 02:55:26

+0

'node_modules/socket.io/lib/socket.io.js'不是Socket.IO的客戶端組件。你可以在這裏找到這個代碼:https://github.com/LearnBoost/socket.io-client/ – scttnlsn 2012-08-07 03:02:24

回答

3

您的服務器從未發送過index.html,因爲您從未告知過它。你需要的東西,如:在

app.use(express.static(__DIRNAME+'/public')); 

,然後把index.html(與像樣式表的任何其他靜態文件一起):

app.get('/', function(req, res) { 
    res.sendfile('index.html'); 
}); 

假設index.html是在您的應用程序的根目錄下,或者,更普遍您的應用的public子目錄。

相關問題