从nodejs中的mongodb导出为CSV

时间:2015-01-13 08:17:09

标签: angularjs node.js mongodb csv

我想在MEAN堆栈中以csv格式导出数据集合。

这是我的csv.server.controller函数:

function(err, source) {
        var result = [];
        //res.setHeader('content-type', 'text/csv');

        res.setHeader('content-disposition', 'attachment; filename=user.csv');

        csv()
            .from(source,{delimiter:'|'})
            .on('data', function(data){
                result.push(data);
            })
            .on('end', function(){
                res.send(result);
            });
    });

在我调用的angularjs控制器中:

$scope.csv = function() {
                    $http.get('/download'). success(function(data, status, headers,config) {
                        var element = angular.element('<a/>');

                        element.attr({
                            href: 'data:text/csv;charset=utf-8,' + encodeURI(data),
                            target: '_blank',
                            download: 'users.csv'
                       })[0].click();

                    }).
                        error(function(data, status, headers, config) {
                            console.log(data);
                        });
                };
            });

路由到:

app.route('/download').get(csv.download);

整个结构适用于大约700行/集合。但不仅如此,我还是因为Out Of Memory而出现浏览器错误。

任何人都可以帮我理解这个问题。我在想,我正在将源文件一次性写入csv表单。我怎么能用块来避免内存异常?

1 个答案:

答案 0 :(得分:0)

Use this for CSV

第1步:npm install csv

var csv = require('csv');

csv.generate({seed: 1, columns: 2, length: 20}, function(err, data){
csv.parse(data, function(err, data){
csv.transform(data, function(data){
  return data.map(function(value){return value.toUpperCase()});
}, function(err, data){
  csv.stringify(data, function(err, data){
    process.stdout.write(data);
           });
       });
   });  
});