这个问题似乎在网上被仿佛提到,但我查了包括stackoverflow上的许多帖子,还是无法排除400 求指点~~!!
用的是Express 3.3.4 + socket.io 0.9.16 Server端写为
app.js
… var app = express(); var server = require(‘http’).createServer(app).listen(app.get(‘port’)); var io = require(‘socket.io’).listen(server); app.set('port’, process.env.PORT || 3000); … app.get('/find’, function (req, res){ finder.test(req, res,io); }) …
find.js
exports.test = function(req,res,io){
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log('socket.io log');
console.log(data);
});
});
res.render(‘page’); }
… page.jade
… script(src=’/socket.io/socket.io.js’) script. var tokens = location.href.split(‘/’); var url = tokens[0]+’//’+tokens[2]; var socket = io.connect(url); socket.on('news’,function(data){ console.log(data);
socket.emit('my other event',{my:'data'});
})
…
得到的客户端错误。。 GET http://localhost:3000/socket.io/socket.io.js 400 (Bad Request) Uncaught ReferenceError: io is not defined
真诚求助~~~
那个官方的例子有点问题的,其实这个,socket-io只是,socket的服务器端,你要使用它的客户端https://github.com/LearnBoost/socket.io-client,然后再引用这个里面的客户端js文件(具体看支持饿什么协议,引用相应的文件)。
@susantjs 你现在用src=’/socket.io/socket.io.js’这个的意思是在你的express指定的public目录,下面去找sockek.io里面的这个文件,你这个文件应该不存在吧
貌似是socketio会在client request的时候,自动产生的。 只是lz这里可能没有自动产生了。 但是这些不是根本原因。 根本原因是lz没有好好的debug程序,一步步找到问题的来源啊。。 或者先google下,一般有可能有人碰到这个问题,然后解决了,会写个bolg出来。 比在论坛里问可能会快一些。。。
@uc2dabing 我尝试设置过app.js的static path让socket.io.js能再运行时找出来,可是虽然可以找到js了 可依然会报 Failed to load resource: the server responded with a status of 400 (Bad Request)