2

无法让 socket.io 工作并且总是出错ReferenceError: io is not defined

服务器代码:

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

var io = socket.listen(app);

app.get('/room', function (req, res) {
res.render('room.ejs')
});

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

app.listen(process.env.PORT || 17336);

客户端代码:

<script src="localhost:17336/socket.io/socket.io.js"></script>
<script>var socket = io.connect('http://localhost:17336')</script>   

这是我网站的目录结构:(
在 WebMatrix 中制作)

Site
  |__iisnode
  |__node_modules
       |__.bin
       |__ejs
       |__express 
       |__socket.io
  |__public
  |__views
       |__room.ejs (Client code is here)
  |__favicon.ico
  |__robots.txt
  |__server.js (Server code is here)
  |__web.config
4

2 回答 2

1

这是因为localhost:17336/socket.io/socket.io.js不可用。我猜你的 socket.io 服务器没有启动,因为你使用的是 Express 2.0 语法,但安装了 Express 3.0。

Express 3 要求您首先实例化 ahttp.Server以将 socket.io 附加到。这是我的做法:

var express = require('express');
var app = express()
  , http = require('http')
  , server = http.createServer(app)
  , io = require('socket.io').listen(server);
于 2013-05-31T13:44:52.573 回答
0

我对socket.io不太了解,但是从字面上看错误消息,似乎localhost:17336/socket.io/socket.io.js没有将符号io导入客户端。那么下一行是不可能的,因为io尚未定义。

您应该在浏览器中打开该socket.io.js文件并阅读它,以确保它确实定义了一个名为io.

于 2013-05-31T13:06:28.530 回答