繁体   English   中英

将CSV文件从URL导入Node.js

[英]Importing a CSV file from URL into Node.js

我目前正在开发一个项目(Node.js with Express),我必须在其中导入一个CSV文件,给定一个特定的URL,然后使用它的数据填充我的Mongo数据库。

我是Node的新手,所以我可能会做一些非常错误的事情,但在我的研究中,我发现这种方式尝试从远程CSV文件中获取数据:

methods.getStops = function (req, res) {
  var line = req.params.line;
  var url = "/apiTransporte/Apresentacao/csv/gtfs/onibus/paradas/" +
    "gtfs_linha{line}-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中?

谢谢您的帮助

你能试试这段代码吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM