我怎样才能解决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.get
callback的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模块是否有确保数据块的顺序。
我能够通过在本地安装缓冲列表模块来解决这个问题。 我最初安装在全球,但由于某种原因导致问题。 仍然不知道为什么…