TypeError:Object#<server>没有方法&#39; connect&#39; </server>

时间:2014-08-14 18:58:47

标签: node.js socket.io

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

我需要每分钟读取一个json feed并将feed中的数据发送到同一系统,基本上我正在尝试将辅助发送者添加到系统中。 (我将把'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#没有方法'connect'       在对象。 (不知疲倦   x.js:4:17)       在Module._compile(module.js:456:26)       at 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库。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

尝试:

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

答案 1 :(得分:0)

我花了两天的时间才发现了这个问题。

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

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

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

我希望它可以帮助别人。