读取node.js中csv文件的内容

我正在尝试在nodejs中实现一个模块( 刚刚开始在nodejs中工作 ),这个模块的要求如下

  1. 上传.csv文件。
  2. 阅读csv文件的内容。

当前用于restful api的框架是“express”:“〜4.2.0”和multer用于file upload。

现在我已经在我的app.js中configuration了像下面这样的multer

app.use(multer({ onFileUploadData : function(file, data){ console.log('onFileUploadData Called with data - '+ data); } })); 

在我的路由文件中,我有一个像下面的post端点

 app.post('/sample.csv',lead.processCSV); 

这条路由从下面的ajax调用被调用

 $.ajax({ xhrFields: {withCredentials: true}, url: '/sample.csv', type: 'POST', success: function (data) { $scope.handleResponse(data); }, error: function (error, xhr) { angular.element('#csvUploadBusyIcon').hide(); alert('Oops! Upload failed'); }, data: formData, cache: false, contentType: false, processData: false }); 

现在我想获得csv文件的内容,即当所有的内容已经被加载,那么我应该处理我的lead.processCSV方法。

我也需要任何其他模块的CSV文件,或者在我的情况下,是否足够多?

任何正确的方向的build议/指导将有所帮助。 提前致谢。

有一个很棒的节点项目帮了我很多。 你应该检查一下我们要使用的是他们的csvparsing模块。 它可以得到一个stream作为input,逐行读取而不会阻塞事件循环,所以基本上在处理文件时,服务器不会卡住,其他请求仍然可以正常处理。

既然你说你刚刚开始使用nodejs,你应该快速search并理解midlewares在请求处理过程中是如何工作的。 作为请求处理的简化,中间件是一个函数(req,res,next)。 请求您获得请求数据。 有了res,你可以发送响应,接下来你发送req和res对象到下一个中​​间件。 这样你就可以在一个部分处理一个请求,stream的最后一个中间件会向客户端发送响应(比如res.send(200)),

Multer({…})调用返回一个中间件函数。 当一个请求到达这个中间件时,multer会尝试下载用户在请求发送的任何文件。 当你说app.use(Multer({…}))时,你要求multer尝试从包含文件的任何post请求中下载文件。 如果不是所有的路由都希望文件被上传,这是一个安全风险。

好吧,这就是说,这是我写的一个示例代码来处理你的用例:

 //Important Security advice: //don't add multer as a middleware to all requests. //If you do this, people will be able to upload files //in ALL YOUR 'post' handlers!!! var Multer = require('multer'); var Parse = require('csv-parse'); var fs = require('fs') function parseCSVFile(sourceFilePath, columns, onNewRecord, handleError, done){ var source = fs.createReadStream(sourceFilePath); var linesRead = 0; var parser = Parse({ delimiter: ',', columns:columns }); parser.on("readable", function(){ var record; while (record = parser.read()) { linesRead++; onNewRecord(record); } }); parser.on("error", function(error){ handleError(error) }); parser.on("end", function(){ done(linesRead); }); source.pipe(parser); } //We will call this once Multer's middleware processed the request //and stored file in req.files.fileFormFieldName function parseFile(req, res, next){ var filePath = req.files.file.path; console.log(filePath); function onNewRecord(record){ console.log(record) } function onError(error){ console.log(error) } function done(linesRead){ res.send(200, linesRead) } var columns = true; parseCSVFile(filePath, columns, onNewRecord, onError, done); } //this is the route handler with two middlewares. //First: Multer middleware to download file. At some point, //this middleware calls next() so process continues on to next middleware //Second: use the file as you need app.post('/upload', [Multer({dest:'./uploads'}), parseFile]); 

我希望这有助于。 确保了解中间件如何在节点中工作:它们是高质量代码的关键。

马塞尔