2012-08-13 216 views
4

我在网址(example.com)有一个网站,并且使用node.js/socket.io将JSON传递给我网页。我目前收到一个错误:“XMLHttpRequest无法加载http://example.com:12003/socket.io/1//897026922693503087/?disconnect=1。原因http://example.com不被Access-Control-Allow-Origin允许。”Socket.io跨域问题 - 访问控制 - 允许来源不允许来源

我的节点代码如下所示:

var http = require('http'); 
    var mysqlClient = require('mysql').createClient({'user':'root','password':'XXXXXXXX'}); 

    mysqlClient.query('USE myDBName'); 

    var mysqlData; 

    setInterval(function(){ 
     mysqlClient.query(
         'SELECT number, page_id FROM dbTableName', 
         function selectCb(err, results, fields) { 
         if (err) { 
          throw err; 
        } 

       mysqlData = []; 
      for(var i = 0; i < results.length; i++){ 
       mysqlData[i] = results[i]; 
      } 
     }); 
    }, 1000); 

    var io = require('socket.io').listen(12003); 
    io.sockets.on('connection', function(client) { 

     console.log("New Connection: ", client.id); //log new connection 

      client.emit('connection', client.id);//custom emit to let site know its connected 
      client.on("requestNewData", function(data){ 
       client.emit('init', JSON.stringify(mysqlData)); 
     }); 

     client.on('disconnect', function() { 
     console.log("Disconnected: ", client.id); 
     }); 
    }); 

我已经试过这行代码没有成功解决问题:

  var io = require('socket.io').listen(12003, {origins: '*:*'}); 

我在Amazon EC2上运行与Ubuntu Ocelot。我的客户端代码:

  <script src="http://example.com:12003/socket.io/socket.io.js"></script> 
      <script type="text/javascript"> 
       var socket = io.connect('http://example.com:12003'); 
       socket.emit("requestNewData", {"nothing":"here"}); 
       ... 

由于我只使用一个插座,我不认为我可以使用“访问控制允许来源”:在我的节点代码“*”。任何帮助将不胜感激。我收到的错误只在Chrome浏览器上 - 根据我的理解,Chrome对跨域连接的限制较多......

在此先感谢。

+0

你有没有发现为解决这个?我看到完全一样的东西。 – Mahn 2014-05-09 12:40:16

回答

0

尽量只包括您socket.io客户端上的相对路径:

<script src="/socket.io/socket.io.js"></script> 
var socket = io.connect('http://example.com'); 
+0

这没有奏效......我现在收到以下错误:GET http://example.com/socket.io/socket.io.js 404(Not Found) 未捕获的ReferenceError:io未定义。我认为这是因为它在端口80上查看我的套接字信息在端口12003上。还有其他想法......? – Robbie 2012-08-26 22:28:30

+0

当我回家时,我不会去看看 – Hortinstein 2012-08-27 06:16:31

+0

当我有机会时,请让我发布......我仍然无法找到解决方案... – Robbie 2012-09-04 18:39:02