【发布时间】:2013-06-12 17:06:03
【问题描述】:
我正在尝试创建一个允许用户以 csv 格式导出数据的系统。将数据格式化为 csv 格式是没有问题的。我在处理 csv 导出数据请求时遇到问题。假设一个用户请求导出所有数据并且它是巨大的。我认为要求用户等到请求完成不是最好的方法吗?我是否应该告诉用户正在导出数据,一旦完成我们会通知?如果是,我应该使用后台进程对吗?
【问题讨论】:
标签: export-to-csv
我正在尝试创建一个允许用户以 csv 格式导出数据的系统。将数据格式化为 csv 格式是没有问题的。我在处理 csv 导出数据请求时遇到问题。假设一个用户请求导出所有数据并且它是巨大的。我认为要求用户等到请求完成不是最好的方法吗?我是否应该告诉用户正在导出数据,一旦完成我们会通知?如果是,我应该使用后台进程对吗?
【问题讨论】:
标签: export-to-csv
如果可能,定义某种可配置的“设置”,默认为 10Mb。如果您知道导出将超过 10Mb,请询问用户是否要导出如此大的行集。如果可能,估计大小并让他们知道会有多大。如果在运行后台导出时向他们显示进度条,则必须有某种进程来处理通信以将其传递回用户命令表单。在表单上有一个选项可以将该设置更改为更接近他们想要作为警告级别的数字。
【讨论】:
我终于使用 nodejs 将流数据以 csv 格式发送给用户。
function csvExport(req, res){
mysqlPool.getConnection(function(err, connection){
if(err){
throw err;
}
res.header('Content-disposition', 'attachment; filename=connects.csv');
res.header('Content-Type', 'text/csv');
var csv_header_row = "Email,First Name,Last Name,Status,Created\n";
res.write(csv_header_row);
var query = connection.query('SELECT * FROM contacts where user_id = ? AND deleted = 0', [req.params.user_id]);
query
.on('error', function(err) {
//handle error
})
.on('fields', function(fields) {
})
.on('result', function(row) {
var csv_row = row.email+','+row.first_name+','+row.last_name+','+row.status+','+row.created+"\n";
res.write(csv_row);
})
.on('end', function() {
res.end('', function(){
console.log('done');
});
});
});
}
【讨论】: