http.request返回var以在Node中的Javascript中使用

时间:2011-08-13 18:31:20

标签: node.js

我一直在尝试将节点连接到网页并将结果返回到同一程序中。这是我的代码:

var http = require('http'),
    sys = require('sys'),
    fs = require('fs');

var options = {
  host: 'myurl.com',
  port: 80,
  path: '/path/to/file',
  method: 'POST'
};

var myglobal = "the test";

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
    myglobal = chunk;
    console.log("myglobal = " + myglobal);
  });
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

console.log("outside of http request: myglobal = " + myglobal);

现在我想要发生的是“myglobal”在程序结束时将网页输出的内容“myurl.com”。然而,这并没有发生,我似乎无法弄清楚如何将“chunk”中的内容转换为程序中的另一个变量。我认为内容将在“req”或“res”变量中,但我转储了变量,无法在任何一个地方找到输出。所以最后,“myglobal”仍然说“测试”,其中http.request代码中的“myglobal”具有“chunk”的输出。只是很想知道我在这里缺少什么。感谢。

的Darryl

2 个答案:

答案 0 :(得分:0)

不确定我是否帮助你。您想使用通过POST请求获得的数据(正文)吗?然后你必须在收到所有的块后继续工作:

var http = require('http'),
    sys = require('sys'),
    fs = require('fs');

var options = {
  host: 'blog.depold.com',
  port: 80,
  path: '/post/5936116582/changes-in-sequelize-1-0-0',
  method: 'POST'
};

var req = http.request(options, function(res) {
  var data = ""
  res.setEncoding('utf8');
  res.on('data', function (chunk) { data += chunk })
  res.on('end', function() {
    console.log("finished request", "data length:", data.length)
    console.log("go on working here")
  })
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end()

答案 1 :(得分:0)

过去几周一直在用这个敲打我的脑袋,在尝试了一堆东西之后决定在最后添加“\ 0”并且它有效!所以似乎socket.write会自动在“http.request”块之外附加“\ 0”,但不会在该块中附加它。所以它会“排队”任何http.request消息,直到我在该块之外发送一条消息,该消息将自动由“\ 0”终止。为什么它以这种方式工作我不知道,但确实如此。