我有两个节点服务器,一个在端口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;
};
答案 0 :(得分:0)
感谢上面的Bill,答案是我实际上并没有发布数据并结束请求!我指的是一些样本的复制/粘贴/编辑错误。这是我应该拥有的最后两行代码:
post_req.write(post_data);
post_req.end();