There are 20,000 entries in the mongodb collection. I export all these entries to csv. I am sending a partial response using this:
res.writeHead(200, { "Content-Type": "application/csv", "Content-disposition": "attachment; filename='import.csv'" }); res.write(data + '0', "binary");
The above code is executed in batch 500. I end using this code when all records are processed.
if (++responseCount == loopCount) { res.end(); }
But I got this error:
Cannot set headers after sending them.
But I get a file loaded with 500 entries.
Here is my complete code.
var exportData = function (req, res, next) { var limit = 500; var responseCount = 0; var loopCount = 1; var size = 30000; //Get 500 records at one time var getData = function (req, start, cb) { req.db.collection('items').find().skip(start).limit(limit).toArray(function (err, records) { if (err) throw err; cb(null, records); }); }; if (size > limit) { loopCount = parseInt(req.size / limit); if ((req.size % limit) != 0) { loopCount += 1; } } for (var j = 0; j < loopCount; j++) { getData(req, limit * j, function (err, records) { if (err) throw err; records.forEach(function (record) { //Process record one by one }); res.write(records); if (++responseCount == loopCount) { res.setHeader('Content-type', 'application/csv'); res.setHeader("Content-disposition", 'attachment; filename="import.csv"'); res.end(); } }); } };
Rohit source share