Javascript 如果没有第三方库,我如何解决learnyounode http collect

Javascript 如果没有第三方库,我如何解决learnyounode http collect,javascript,node.js,Javascript,Node.js,我是node的新手,正在学习LearnyYouNode交互式课程,我遇到了http收集问题 首先,当我运行learnyonode verify命令时,使用第三方软件包解决问题的实际解决方案不起作用。我甚至不知道如何在LearnyYounode测试之外测试这个。我该怎么做?我猜是某种节点服务 其次,由于我不太明白这一点,我真的很想尝试在没有第三方软件包的情况下实现它,但我不知道从哪里开始。我不是在寻找一个解决方案交给我,但我真的很感激在正确的方向上推动,无论是在线教程还是节点文档中的特定方法都可能

我是node的新手,正在学习LearnyYouNode交互式课程,我遇到了http收集问题

首先,当我运行
learnyonode verify
命令时,使用第三方软件包解决问题的实际解决方案不起作用。我甚至不知道如何在LearnyYounode测试之外测试这个。我该怎么做?我猜是某种节点服务

其次,由于我不太明白这一点,我真的很想尝试在没有第三方软件包的情况下实现它,但我不知道从哪里开始。我不是在寻找一个解决方案交给我,但我真的很感激在正确的方向上推动,无论是在线教程还是节点文档中的特定方法都可能有所帮助

这里的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)
  }))  
})
learnyonode的输出验证http收集

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的错误,不幸的是,这还不足以进行LearnyYouNode验证

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
模块没有在本地安装,我最初是在全球安装的,这似乎导致了一个问题,不知道为什么,如果有人能解释为什么可能是这个问题,请做,

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

在没有第三方软件包的情况下

-如果使用response.on方法-存在多个数据事件,因此必须将它们添加到回调中并存储在变量中。 -您必须像httpclient练习一样使用response.setEncoding;
-对输出使用response.end方法回调

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

在没有第三方软件包的情况下

-如果使用response.on方法-存在多个数据事件,因此必须将它们添加到回调中并存储在变量中。 -您必须像httpclient练习一样使用response.setEncoding;
-对输出使用response.end方法回调

我可以通过在本地安装模块来解决这个问题。我最初是在全球范围内安装的,但由于某种原因导致了一个问题。仍然不确定为什么…

我能够通过在本地安装模块来解决这个问题。我最初是在全球范围内安装的,但由于某种原因导致了一个问题。仍然不确定为什么…

要在不使用第三方库的情况下回答您的问题:

来自http.get的
response
对象发出结束事件。我使用与上一个练习相同的技术获取字符串格式的
数据
,然后在每个数据事件中将其附加到变量(以空字符串开头),然后在结束事件时注销结果

以下是我的解决方案:

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);
}

要在不使用第三方库的情况下回答您的问题,请执行以下操作:

来自http.get的
response
对象发出结束事件。我使用与上一个练习相同的技术获取字符串格式的
数据
,然后在每个数据事件中将其附加到变量(以空字符串开头),然后在结束事件时注销结果

以下是我的解决方案:

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);
}

如果您不想使用第三方,以下是我的解决方案:

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(''));
    });
});

如果您不想使用第三方,以下是我的解决方案:

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(''));
    });
});

是的,我在全球范围内安装了npm的“bl”,这样我就可以再次使用它,但也遇到了同样的问题。谢谢你的提问!是的,我在全球范围内安装了npm的“bl”,这样我就可以再次使用它,但也遇到了同样的问题。谢谢你的提问!