无法让一个node.js服务器与另一个服务器通信

时间:2012-10-15 01:29:25

标签: node.js coffeescript

我有两个节点服务器,一个在端口5000上(称之为“Face”),另一个在端口5001上(称之为“Hands”)

两者都是通过foreman procfile同时启动的。端口是固定的,我要定位的网址在浏览器中工作。

当双手启动时,它需要与Face(Facepalm?)对话并自行注册。但是,以下代码似乎不起作用。 (这是coffeescript生成的JS)

在http服务器启动后,在服务器初始化期间调用寄存器。如果是时间问题,我用setTimeout()2秒开始注册函数。我知道它的命中(/ home / register)可用和正常工作的页面。

现在我可以看到它进入“发布到”控制台日志行。在Face上我已经在注册码中放了一个console.log,它从不记录任何内容 - 这意味着我认为它实际上没有被击中。 (如果从浏览器点击它会记录)并且没有任何错误 - 它只是调用请求然后徘徊去获取三明治。

两台服务器都“自己动手” - 不使用任何框架。如果你看到一个奇怪的拼写错误或需要更多信息,请告诉我。谢谢!

register = function() {
    var _this = this;
    console.log('Registering with Face Server');
    return post_face('/home/register', GLOBAL.data, function(rs) {
      console.log(rs);
      if (rs.registered) {
        GLOBAL.data.registered = true;
        return console.log("Registered with face at " + GLOBAL.config.face_host + ":" + GLOBAL.config.face_port);
      } else {
        throw "ERROR: Could not register with face server! " + GLOBAL.config.face_host + ":" + GLOBAL.config.face_port;
        return false;
      }
    });
  };

  post_face = function(path, data, cb) {
    var post_data, post_options, post_req;
    post_data = querystring.stringify({
      'registration': data
    });
    post_options = {
      host: GLOBAL.config.face_host,
      port: GLOBAL.config.face_port,
      path: path,
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': post_data.length
      }
    };
    console.log("Posting to " + post_options.host + ":" + post_options.port);
    post_req = http.request(post_options, function(res) {
      var response,
        _this = this;
      console.log(res);
      response = "";
      res.setEncoding('utf8');
      res.on('data', function(chunk) {
        return response += chunk;
      });
      return res.on('end', function() {
        return cb.call(_this, response);
      });
    });
    return true;
  };

1 个答案:

答案 0 :(得分:0)

感谢上面的Bill,答案是我实际上并没有发布数据并结束请求!我指的是一些样本的复制/粘贴/编辑错误。这是我应该拥有的最后两行代码:

post_req.write(post_data);
post_req.end();