如何处理在线CSV文件,如“http://…/data.csv?para1 = …&para2 = …”与节点js

我最近尝试使用节点js从其他networking收集一些数据,如雅虎财经,像这样的url之一“ http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c= 1999&d = 01&e = 4&f = 2016&g = d&ignore = .csv “,如果我把这个URL放到浏览器中,popup窗口会被提示。 而在我的节点代码这个url将不会被发现。

var fs = require('fs'); var http = require('http'); var url = require('url'); var csv = require( "fast-csv" ); // var FILENAME = "file/table.csv"; var FILENAME = "http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c=1999&d=01&e=4&f=2016&g=d&ignore=.csv"; function fast_csv_read(filename) { csv.fromPath(filename) .on("data", function(data){ console.log("current data: "); console.log(data); }) .on("end", function(){ console.log("done reading"); }); } fast_csv_read(FILENAME); 

如果我用浏览器下载这个文件,并保存在“file / table.csv”,它工作正常。 不知道发生了什么事…

.fromPath只接受文件path,而不是URL。

必须首先从URL中检索文档 ,并使用以下方法之一将其内容提供给fast-csv模块:

  • 将文档内容传递给.fromString()
  • 将可读stream传.fromStream()
  • 将可读stream传.parse()

request模块提供了从URL返回可读stream的便捷方式; 安装npm --save install request

例如,将可读stream传.fromStream()将如下所示:

 #!/usr/bin/env node var csv = require( "fast-csv" ); // Require the 'request' module. // Install it with `npm install --save request`. var request = require('request'); var URL = "http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c=1999&d=01&e=4&f=2016&g=d&ignore=.csv"; function fast_csv_read_url(url) { // Let request return the document pointed to by the URL // as a readable stream, and pass it to csv.fromStream() csv.fromStream(request(url)) .on("data", function(data){ console.log("current data: "); console.log(data); }) .on("end", function(){ console.log("done reading"); }); } fast_csv_read_url(URL);