我怎样才能解决learnyounode HTTP收集没有第三方库

我是新来的节点,我正在通过nodechool.io learnyounode交互式课程的工作方式,我有一个http-collect问题的问题。

首先使用第三方软件包缓冲列表解决问题的实际scheme在运行learnyounode verify命令时learnyounode verify 。 我甚至不知道如何testinglearnyounodetesting的这一边。 我将如何做到这一点? 我在猜测某种节点服务?

其次,因为我不太明白这一点,我真的想尝试没有第三方包实施,但我不知道从哪里开始。 我不是在寻找一个解决scheme交给我,但会真正感谢一个正确的方向,无论是在线教程或在节点文档中的一个特定的方法,可能有所帮助。

这里的参考是learnyounode解决scheme,我失败了

 var http = require('http') var bl = require('bl') http.get(process.argv[2], function (request) { request.pipe(bl(function (err, data) { if (err) return console.error(data) data = data.toString() console.log(data.length) console.log(data) })) }) 

learnyounode verify http-collect的输出learnyounode verify http-collect

 Verifying "HTTP COLLECT"... ACTUAL: "" EXPECTED: "123" ACTUAL: null EXPECTED: "Flat out like a swag no worries as dry as a big smoke. Lets throw a fruit loop how as stands out like not my bowl of rice. " ACTUAL: null EXPECTED: "" # FAIL Your solution to HTTP COLLECT didn't match the expected output. Try again! 

更新:可能的代理问题…

进一步更新:不是一个代理问题,但留在这里的案例信息是有帮助的其他人

所以我相信我已经想出了这个问题,但还没有找出解决办法。 我认为这是一个代理问题,因为我在工作networking上这样做。 我得出这个结论,因为我和以下有同样的错误

 http.get({path:'http://www.google.com/index.html'}, function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); }); 

一旦我改变了上面的snippit到下面的地方,我们的公司代理是http://http.proxy.somewhere.com:1234 ,我不再收到这个snippit的错误,不幸的是这对于learnyounodevalidation是不够的。

 http.get({ host: 'http.proxy.somewhere.com', path:'http://www.google.com/index.html', port: 1234}, function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); }); 

带有缓冲列表的解决scheme

问题是, bl模块没有在本地安装,我原来是全球安装的,似乎导致了一个问题,不知道为什么,如果有人能解释为什么它可能是问题请做,

很抱歉听到这个消息。 奇怪的是,我刚刚完成了这个练习。 我检查了我的电脑上的解决scheme,它的工作。 您在编写程序之前安装了bl? npm安装bl

至于没有第三方包。

– 如果你使用response.on方法 – 有多个数据事件,所以你将不得不在你的callback中添加它们,并将它们存储在一个variables中。 你将不得不像httpclient一样使用response.setEncoding; – 为输出使用response.end方法callback

这是我的解决scheme,如果你不想使用第三方:

 var http = require('http'); var info = []; var url = process.argv[2]; http.get(url, function(res) { res.setEncoding('utf8'); res.on('data', function(data) { info.push(data); }); res.on('error', console.error); res.on('end', function() { console.log(info.join('').length); console.log(info.join('')); }); }); 

要回答你的问题“没有第三方图书馆”

来自http.getcallback的response对象发出一个结束事件。 我使用与前面练习相同的技术来获取string格式的data ,然后将其附加到每个数据事件的variables(以空string开始),然后在结束事件上注销结果。

不知道使用.setEncoding('utf8')是高性能的。 我很想看到一个解决scheme,合并Buffer对象(没有第三方库),然后使用.toString()尽pipe。

以下是我的callback:

 function httpGetCallback(response) { var result = ''; function appendResult(data) { result += data; } function logResult() { console.log(result.length); console.log(result); } response.setEncoding('utf8'); response.on('data', appendResult); response.on('end', logResult); } 

快速提示:我很好奇Node的http模块是否有确保数据块的顺序。

我能够通过在本地安装缓冲列表模块来解决这个问题。 我最初安装在全球,但由于某种原因导致问题。 仍然不知道为什么…