[Socket.io]express routing 引发 客户端无法接受到io对象
发布于 8 年前 作者 Penergy 3691 次浏览 来自 问答

简单的做了一个基于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>中,服务器和客户端可以执行通信。

回到顶部