另一个/socket.io/socket.io.js 404

时间:2013-04-08 19:19:47

标签: express socket.io

我的客户端app.html:

<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

已经在这里被https://stackoverflow.com/a/10192084/990434了,我已经表达了v3.1.1,我也试过这个答案https://stackoverflow.com/a/14167488/990434无济于事。我已经尝试了一些谷歌小组中的其他随机内容,这些内容在我漫长的凌乱历史中似乎无法找到。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分: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

的请求