我是节点的新手,我正在通过nodeschool.io learnyounode互动课程,我遇到了http-collect问题。
首先,当我运行learnyounode verify
命令时,使用第三方软件包Buffered List来解决问题的实际解决方案不起作用。我甚至不确定如何测试learnyounode测试的这一方面。我该怎么做?我猜某种节点服务?
其次,由于我不太明白这一点,我真的想尝试在没有第三方包的情况下实现它,但我不知道从哪里开始。我不是在寻找一个可以交给我的解决方案,但我真的很感激能够在正确的方向上轻推,无论是在线教程还是节点文档中可能有用的特定方法。
这里的参考是我失败的learnyounode解决方案
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
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!
进一步更新:不是代理问题,但请将此部分留在此处以防信息对其他人有帮助
所以我相信我已经找到了问题,但尚未弄清楚解决方案。我认为这是一个代理问题,因为我在工作网络上这样做。我得出了这个结论,因为我遇到了与以下相同的错误
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的错误,不幸的是,这对于learnyounode验证来说还不够。
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);
});
问题是bl
模块没有安装在本地,我最初安装在全球范围内,这似乎引起了一个问题,不知道为什么,如果有人能解释为什么它可能是问题请做,
答案 0 :(得分:2)
很抱歉听到这个消息。很奇怪,我其实刚刚完成了这项运动。 我在计算机上检查了你的解决方案,但它确实有效 你在编写程序之前安装了bl吗? npm install bl
没有第三方包装。
- 如果使用response.on方法 - 有多个数据事件,因此您必须在回调中添加它们并将它们存储在变量中。 - 你将不得不像httpclient练习一样使用response.setEncoding; - 对输出使用response.end方法回调
答案 1 :(得分:2)
如果您不想使用第三方,这是我的解决方案:
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(''));
});
});
答案 2 :(得分:1)
在不使用第三方库的情况下回答您的问题:
来自response
回调的http.get
对象会发出结束事件。我使用与上一练习相同的技术以字符串格式获取data
,然后将其附加到每个数据事件的变量(以空字符串开头),然后注销结果结束事件。
以下是我的解决方案:
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);
}
答案 3 :(得分:-1)
我能够通过在本地安装Buffered List模块来解决这个问题。我最初在全球安装,但由于某种原因导致问题。还不确定为什么......