javascript - 将 CSV 文件从 URL 导入到 Node.js

标签 javascript node.js csv

我目前正在开发一个项目(带有 Express 的 Node.js),我必须在其中导入一个 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 文件获取数据。但是,我在尝试获得响应时遇到了问题,显然它是成 block 出现的。我尝试将其连接到 response.on('data') 回调之外的字符串中,例如:

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

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

我的问题是,在读取所有 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
});

关于javascript - 将 CSV 文件从 URL 导入到 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29503640/

相关文章:

javascript - 提前从 jquery 类型中获取值

javascript - 需要帮助思考如何异步编程

javascript - FUNCTIONS 的继承正在成为一场噩梦

python - 使用 Python 将 .csv 文件导入 SQLite 表时指定数据类型的有效方法?

java - 如何将单行数据插入到多个表中

javascript - 选择下一行时,清除先前选择的表格行

javascript - 从一个数组中获取值并将其添加到另一个数组中的最后一个值

javascript - 如何验证文本输入字段的接收日期,使其从今天算起在 4 到 8 周之间?

session - Node.js:无法在 Redis pubsub 事件中更新 session ?

powershell - 检查大型 csv 文件是否匹配 ID 需要很长时间