【问题标题】:Read remote file with node.js (http.get)使用 node.js (http.get) 读取远程文件
【发布时间】:2013-01-27 21:42:08
【问题描述】:

读取远程文件的最佳方式是什么?我想获取整个文件(不是块)。

我从下面的例子开始

var get = http.get(options).on('response', function (response) {
    response.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
});

我想将文件解析为 csv,但是为此我需要整个文件而不是分块数据。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    我会为此使用request

    request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
    

    或者如果您不需要先保存到文件,只需将 CSV 读入内存,您可以执行以下操作:

    var request = require('request');
    request.get('http://www.whatever.com/my.csv', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var csv = body;
            // Continue with your processing here.
        }
    });
    

    等等

    【讨论】:

    • 任何方式在本地执行此操作,包含一个文件的依赖项似乎有点过头了?
    • request 非常标准,只是以干净的格式包装这些“本机”调用。
    • @Jamie Node 非常轻量级,几乎只包含最低限度的内容,因此与 PHP 不同,最好习惯于使用大量模块。让它们保持最新很容易(因为package.json)而且它们通常非常快。
    • 这是否等待将整个文件保存到内存中?如何像使用 pipe() 一样流式传输传入的数据但不写入数据?
    • > “截至 2020 年 2 月 11 日,request 已完全弃用。预计不会有新的变化。事实上,一段时间以来都没有。”
    【解决方案2】:

    您可以这样做,而无需使用任何外部库。

    const fs = require("fs");
    const https = require("https");
    
    const file = fs.createWriteStream("data.txt");
    
    https.get("https://www.w3.org/TR/PNG/iso_8859-1.txt", response => {
      var stream = response.pipe(file);
    
      stream.on("finish", function() {
        console.log("done");
      });
    });
    

    【讨论】:

    • 如果网站需要用户名和密码怎么办?你也能解释一下吗?
    【解决方案3】:
    http.get(options).on('response', function (response) {
        var body = '';
        var i = 0;
        response.on('data', function (chunk) {
            i++;
            body += chunk;
            console.log('BODY Part: ' + i);
        });
        response.on('end', function () {
    
            console.log(body);
            console.log('Finished');
        });
    });
    

    对此进行更改,这有效。有cmets吗?

    【讨论】:

    • 如果网站需要用户名和密码怎么办?你也能解释一下吗?
    【解决方案4】:
    function(url,callback){
        request(url).on('data',(data) => {
            try{
                var json = JSON.parse(data);    
            }
            catch(error){
                callback("");
            }
            callback(json);
        })
    }
    

    您也可以使用它。这是异步流。当响应不是 JSON 时会出现错误。同样在 404 状态码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多