与node.js我如何设置var从HTTP客户端响应

With node.js how to I set a var to response from HTTP client?

本文关键字:var HTTP 响应 客户端 设置 js node 何设置      更新时间:2023-09-26

我知道这可能是异步Javascript 101,我在Kindle上确实有一些书可以参考,但我的设备不在附近。

我有一个节点应用程序与变量被分配给我正在加载的模块。该模块有一个函数,用于从URL下载数据字符串。

问题是,在请求返回之前,我如何不设置变量?

我的代码是这样的:

Downloader.js:

var http = require('http');
exports.downloadString = function(str) {
  console.log("Downloading from " + str);
  http.get(str, function(res) {
    var data = [];
    console.log("Got response: " + res.statusCode);
    res.on('data', function (chunk) {
      data.push(chunk);
    });
    res.on('end', function() {
      return data.join('');
    });
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });
}

app.js:

var downloader = require('./lib/Downloader')
, dateParser = require('./lib/DateParser')
, eventIdGenerator = require('./lib/EventIdGenerator');
var report = downloader.downloadString("http://exampleapi.com");
console.log(report);

我需要等待,直到名为"report"的变量被填充。

显然,这意味着我的Mocha测试也失败了,因为我仍然不确定如何告诉测试等待,直到变量被填满。

我相信这是非常简单的,但我却一片空白!

谢谢!

Node.js(大部分)是异步的,所以你需要传递一个回调函数给你的模块:

Downloader.js:

var http = require('http');
exports.downloadString = function(str, callback) {
  console.log("Downloading from " + str);
  http.get(str, function(res) {
    var data = [];
    console.log("Got response: " + res.statusCode);
    res.on('data', function (chunk) {
      data.push(chunk);
    });
    res.on('end', function() {
      callback(data.join(''));
    });
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });
};

app.js:

var downloader = require('./lib/Downloader')
, dateParser = require('./lib/DateParser')
, eventIdGenerator = require('./lib/EventIdGenerator');
downloader.downloadString("http://exampleapi.com", function(report) {
    console.log(report);
});