无法让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
答案 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
的变量。