[Socket.io]express routing 引发 客户端无法接受到io对象
简单的做了一个基于express+socketio的应用。
在服务端,使用express routing。socket服务器能够成功建立。代码如下: start.js
var app = require('../app');
var config = require("../config.js");
var socketServer = require('../socketServer.js');
var http = require('http');
app.set('port', config.httpPort);
var httpServer = http.createServer(app).listen(app.get('port'));
socketServer.listen(httpServer);
socketServer.js
var socketio = require('socket.io');
var io;
var devicesOnline = {};
var usersOnline = {}; // ukey: socketId
exports.listen = function(server){
io = socketio.listen(server);
io.on('connection',function(socket){
// Devices handlers
handleDevicesOnline(socket, devicesOnline, handleAck);
// Users online handlers
handleUsersOnline(socket, usersOnline);
// Message sending
handleMessageToUser(socket, usersOnline);
// Users off-line handlers
});
}
app.js
app.use('/v1.0.0', router);
app.use(function(req,res,next){
var err = new Error('Not Found');
err.status = 404;
next(err);
});
在客户端:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
在浏览器上运行console显示: ReferenceError: io is not defined, 并提示服务器端express routing 404报错。
请问这是什么错误?
3 回复
socketio 服务端代码呢
@hanyuzhou2006 谢谢询问,已经更新问题
问题已经解决,我通过ajax调用<script src="/socket.io/socket.io.js"></script>脚本。动态调用脚本,浏览器无法编译,io对象不保存在文件中。我把脚本放在网站首页载入的<head>中,服务器和客户端可以执行通信。