2012-08-30 74 views
2

我正嘗試將本地計算機上的Chrome瀏覽器連接到帶有socket.io的遠程節點服務器。我使用expressjs提供所有關於我的節點服務器的文件,所以我有一個帶有html和js文件的公共目錄(我創建了一個到npm的node_modules下的socket.io文件的符號鏈接)。socket.io遠程客戶端不能正常工作

我遇到的問題是,當瀏覽器拉我的index.html我得到以下錯誤:

未捕獲的ReferenceError:要求沒有定義socket.io.js:12 未捕獲的ReferenceError:IO不定義爲

我嘗試了像其他幾個職位的CDN,但導致了另一個問題。許多帖子都提倡這種方法,所以我不確定爲什麼它不解決nodejs的問題。有任何想法嗎?

這裏是我的index.html的樣子:

<html> 
<head> 
</head> 
<body> 
<script src="http://nodeserver:8080/socket.io/lib/socket.io.js"></script> 

<script> 
    var socket = io.connect('http://nodeserver:8080'); 
    socket.on('', function (data) { 
    console.log(data); 
    socket.emit('update checkins', { my: 'data' }); 
    }); 
</script> 
<h2>Test Page</h2> 
</body> 
</html> 

我的服務器代碼如下所示:

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

    // Get the environment variables we need. 
    var ipaddr = process.env.VCAP_APP_HOST || 'myserver.com'; 
    var port = process.env.PORT || 8080; 

    app.configure(function() { 
     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
     app.use(app.router); 
     app.use(express.static(__dirname + '/public')); 
    }); 

// set up the RESTful API, handler methods are defined in api.js 
    var api = require('./controller/api.js'); 
    app.get('/foursq', api.list); 

// Set Socket.io 
    io.sockets.on('connection', function (socket) { 
     console.log('Socket created...'); 
     socket.emit('welcome', {welcome: 'you'}); 
     socket.on('update checkins', function (msg) { 
      socket.broadcast.emit('checkins', api.list); 
     }); 
    }); 

    // And start the app on that interface (and port). 
    app.listen(port, ipaddr, function() { 
     console.log('%s: Foursquare Node server started on %s:%d ...', Date(Date.now()), 
      ipaddr, port); 
    }); 
+0

在客戶端,你應該使用''這是由socket.io服務器服務的客戶端js。 – billy

+1

你的意思是它由socket.io服務器提供服務?我發現我明確地必須將socket.io-client/dist/socket.io.js文件放在我的公共目錄中,這樣我才能得到404。那是你在做什麼? – occasl

+0

不,您不必在公用目錄中複製socket.io文件。 socket.io應該用它的客戶端文件來響應'/ socket.io/socket.io.js':http://socket.io/有一個工作示例 – billy

回答

1

的問題是我的原代碼監聽應用對象,但是當我更新了代碼以添加套接字,我忽略將其更改爲server.listen,如下所示:

server.listen(port, ipaddr, function() { 
    console.log('%s: Foursquare Node server started on %s:%d ...', Date(Date.now()), 
     ipaddr, port); 
}); 

這就讓我簡單地把腳本包括如下而無需複製任何東西比利指出:

<script src="/socket.io/socket.io.js"></script>