Socket.io无法摆脱“io未定义”错误

时间:2013-05-31 12:51:54

标签: node.js socket.io webmatrix

无法让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

2 个答案:

答案 0 :(得分:1)

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

Express 3要求您实例化http.Server以将socket.io连接到第一个。我是这样做的:

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

答案 1 :(得分:0)

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

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