Uri*_*che 5 javascript csv 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);
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点,应该注意从远程 CSV 文件中获取数据。但是,我在尝试获得响应时遇到了问题,显然它是成块的。我尝试将它连接到 response.on('data') 回调之外的字符串中,如下所示:
var response_data = "";
response.on('data', function (data) {
response_data += data;
...
Run Code Online (Sandbox Code Playgroud)
但是我在应该填充后访问 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
});
Run Code Online (Sandbox Code Playgroud)