Socket.io无法摆脱“io未定义”的错误
不能得到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
这是因为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);
我不太了解socket.io,但从字面上看错误消息,看起来localhost:17336/socket.io/socket.io.js
不是将符号io
导入客户端。 那么下一行是不可能的,因为io
尚未定义。
你应该在浏览器中打开这个socket.io.js
文件并读取它,以确定它确实定义了一个名为io
的variables。