2013-04-08 52 views
0

我的客戶端app.html:另一/socket.io/socket.io.js 404

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://mywebsite.com/'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

我的服務器端app.js:

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

server.listen(process.env.PORT || 8888); 

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

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

如果我去http://mywebsite.com:8888控制檯讀取:

Object {hello: "world"} 

,但如果我去http://mywebsite.com/app.html控制檯上寫着:

GET http://mywebsite.com/socket.io/socket.io.js 404 (Not Found) 
Uncaught ReferenceError: io is not defined 

爲refired這裏https://stackoverflow.com/a/10192084/990434我有快遞V3.1.1,我也試過這個答案https://stackoverflow.com/a/14167488/990434無濟於事。我嘗試了一些谷歌組織中的其他隨機事件,這在我漫長的混亂歷史中似乎找不到。任何想法如何解決這個問題?

回答

1

您正在混淆存儲在服務器上的文件和服務器提供的路由。儘管app.html是服務器上的文件,但您的服務器不會響應對/app.html的請求。相反,當請求來到/時,您的服務器將發送文件app.html。事實上,客戶/收件人永遠不會知道它收到的文件在您的服務器上被稱爲app.html。所以當一個客戶端(瀏覽器)去http://mywebsite.com:8888然後他們得到具有script標籤的html文件。這些script標籤有代碼,使你的瀏覽器連接到socket.io被編程爲,在'connection',將消息發送到客戶端:

socket.emit('news', { hello: 'world' }); 

在瀏覽器中運行,那麼客戶端代碼接收消息

socket.on('news', function (data) { 
    console.log(data); 

,然後將消息發送回服務器

socket.emit('my other event', { my: 'data' }); 

一切工作爲編程。但是,服務器上沒有「路由器」,正在偵聽對/app.html的請求