繁体   English   中英

使用node.js,如何设置var以从HTTP客户端响应?

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

我知道这可能是Asynchronous 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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM