将 CSV 文件从 URL 导入 Node.js

Posted

技术标签:

【中文标题】将 CSV 文件从 URL 导入 Node.js【英文标题】:Importing a CSV file from URL into Node.js 【发布时间】:2015-06-12 18:16:12 【问题描述】:

我目前正在处理一个项目(带有 Express 的 Node.js),我必须在给定特定 URL 的情况下导入 CSV 文件,然后用它的数据填充我的 Mongo 数据库。

我对 Node 很陌生,所以我可能做错了什么,但在我的研究中,我发现这种方法可以尝试从远程 CSV 文件中获取数据:

methods.getStops = function (req, res) 
  var line = req.params.line;
  var url = "/apiTransporte/Apresentacao/csv/gtfs/onibus/paradas/" +
    "gtfs_linhaline-paradas.csv".format(line: line);
  var parsed = [];

  var http = require('http');

  var options = 
    host: 'dadosabertos.rio.rj.gov.br',
    port: 80,
    path: url
  
  http.get(options, function(response) 
    response.on('data', function( data ) 
      csv_data = data.toString();
      csv_data = csv_data.replace("", "\r");
      jsonified = [];
      csv(csv_data, columns: true, rowDelimiter: 'unicode', function (err, output) 
        console.log("parsing data");
        if (err)
          console.log("ERROR: ", err);
        jsonified.push(output);
      );
      console.log("data parsed", jsonified);
     );
    console.log("Got response: " + response.statusCode);
  ).on('error', function(e) 
    console.log(url);
    console.log("Got error: " + e.message);
  );

这是我的观点,应该注意从远程 CSV 文件中获取数据。但是,我在尝试获得响应时遇到了问题,显然它是成块的。我尝试将其连接到 response.on('data') 回调之外的字符串中,例如:

var response_data = "";
response.on('data', function (data) 
  response_data += data;
  ...

但我无法在填充后访问 response_data。如果我使用 console.log 记录它而不是将其添加到字符串中,预期的 CSV 会显示在我的终端上,在某些点上被破坏,我认为这是因为每当检索到一个块时都会调用回调。

我的问题是,在读取所有 CSV 并且我的字符串“response_data”包含 CSV 文件中的所有数据后,我该如何调用函数?所以我可以正确地将其解析为 JSON 对象并存储到我的 MongoDB 中?

感谢您的帮助

【问题讨论】:

【参考方案1】:

你能试试这个代码吗?

var response_data = '';
response.on('data', function(data) 
    response_data += data;
);
response.on('end', function() 
    // 1. convert response_data to json 
    // 2. store json to mongodb
);

【讨论】:

以上是关于将 CSV 文件从 URL 导入 Node.js的主要内容,如果未能解决你的问题,请参考以下文章

从 csv 文件将数据导入 SAS

将特定数据从 csv 文件导入 MS Access

将多个 CSV 文件从文件夹导入 SQL Server

将数据从csv导入excel

如何将导入 python 的数据从 csv 文件转换为时间序列?

使用java将数据从csv文件导入访问数据库