2013-04-08 51 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的请求