【问题标题】:TypeError: Object #<Server> has no method 'connect'类型错误:对象 #<Server> 没有方法“连接”
【发布时间】:2014-10-08 13:18:09
【问题描述】:

我有一个现有的 socket.io 应用程序来更新页面,有人写了一条消息,它出现在连接到套接字的所有客户端上。这部分工作正常。

我需要每分钟读取一个 json 提要并将提要中的数据发送到同一系统,基本上我正在尝试将辅助发件人添加到系统中。 (稍后我会将“feed reading”部分放入无限循环)代码如下:

var http = require('http');
var server = require('http').Server();
var io = require('socket.io')(server);
var socket = io.connect('http://host_url.com:8000');

http.get('http://json_feed_url', function(res) {
    var body = '';

    res.on('data', function(chunk) {
        body += chunk;
    });

    res.on('end', function() {
        var items = JSON.parse(body)
        items.forEach(function(item, index) {
          socket.emit('update', {
                title: item.title,
                message: item.message
            });
        });
    });
}).on('error', function(e) {
      console.log("Got error: ", e);
});

当我运行脚本时,我得到了:

var socket = io.connect('http://host_url.com:8000'); ^ TypeError: Object # has no method 'connect' 在对象。 (索引 x.js:4:17) 在 Module._compile (module.js:456:26) 在 Object.Module._extensions..js (module.js:474:10) 在 Module.load (module.js:356:32) 在 Function.Module._load (module.js:312:12) 在 Function.Module.runMain (module.js:497:10) 启动时 (node.js:119:16) 在 node.js:902:3

我从“消息表单”页面导出代码,它运行良好:

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

    function update_score() {
        socket.emit('update', {
            title: $("#txtTitle").val(),
            message: $("#txtMessage").val()
        });
    }
</script>

消息表单、宿主应用程序和这个提要阅读器在同一个文件夹中,所以它使用同一个 socket.io 库。

有什么建议吗?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您需要使用 socket.io-client 来模拟客户端从服务器发送消息。

    试试:

        var socket = require('socket.io-client')('http://localhost');
        socket.on('connect', function(){
            socket.on('event', function(data){});
            socket.on('disconnect', function(){});
         }); 
    

    【讨论】:

    • 我的东西实际上在客户端,它应该读取提要并将其发送到服务器。这基本上就像将系统消息发布到聊天系统中。
    • 现在我明白你要做什么了...见github.com/Automattic/socket.io-client
    【解决方案2】:

    我花了 2 天时间才发现问题。

    主机应用程序是 6 个月前编写的,我通常不会更新 javascript 库,除非有我需要的问题/错误/新功能。

    所以当我为这个新的附加模块安装 socket.io-client 时,它是库的新版本。

    错误只是客户端和主机之间的版本冲突。我将主机应用程序上的 socket.io 版本升级到最新版本,代码开始工作。

    我希望它可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2014-09-03
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多