针对用户的Nodejs CSV数据导出系统

我需要允许用户以csv格式导出他们的数据。 我已经在nodejs中编写了应用程序。 用户的导出数据可能很大。 所以我想知道如何在nodejs中处理这种情况。 我应该用户process.nexttick或subprocessnodejs的API? 还有没有任何好的模块可用于nodejs将数据从mysql转换为csv。

从你的mysql-db中逐行读取,并逐行追加到你的文件中

我不太了解mysqlmodule,所以我在这里假设每行只是一个数组,因此'row.join(';')'。 如果不是这种情况(也许是一个对象),你应该解决这个问题。

var fs = require('fs'); var connection = require('mysql').createConnection({yourdbsettingshere}); function processRow (row) { fs.appendFile('your-file.csv', row.join(';'), function (err) { connection.resume(); }); } var query = connection.query('SELECT * FROM WHATEVER'); query .on('error', function(err) { // do something when an error happens }) .on('fields', function(fields) { processRow(fields); }) .on('result', function(row) { // Pausing the connnection is useful if your processing involves I/O connection.pause(); processRow(row, function (err) { connection.resume(); }); }) .on('end', function() { // now you can mail your user }); 

如果您有很多请求,则可以使用计算集群模块来分配工作负载

接受的答案不起作用,因为CSV文件被分隔,而不是; 。 在每一行结束之后也没有换行符, fields对象包含有关column attributes而不是data rowsresults包含查询产生的行。 因此我写了自己的代码来生成CSV文件。 如果你需要更多的解释,那么请评论,我会提供。

 pool.query('SELECT * FROM category', function (error, results, fields) { var reportFile = Date.now(); fs.closeSync(fs.openSync(__dirname + '/../reports/' + reportFile + '.csv', 'w')); var attributes = []; var row = []; for(var x = 0; x<fields.length; x++) attributes.push(fields[x].name); fs.appendFile(__dirname + '/../reports/' + reportFile + '.csv', attributes.join(','), function (err) { if(err) console.log('Error appending fields', err); fs.appendFileSync(__dirname + '/../reports/' + reportFile + '.csv', '\n'); for(var x = 0; x<results.length; x++) { row = []; for(var y = 0; y<attributes.length; y++){ row.push(results[x][attributes[y]]); } fs.appendFileSync(__dirname + '/../reports/' + reportFile + '.csv', row.join(',')); fs.appendFileSync(__dirname + '/../reports/' + reportFile + '.csv', '\n'); } req.reportFile = reportFile; next(); }); });