mongodb集合中有20,000條記錄。我在csv中導出所有這些記錄。我用這個發送部分響應:Nodejs發送部分響應
res.writeHead(200, {
"Content-Type": "application/csv",
"Content-disposition": "attachment; filename='import.csv'"
});
res.write(data + '0', "binary");
上面的代碼一批500我使用此代碼時,所有記錄都處理結束時執行。
if (++responseCount == loopCount) {
res.end();
}
但我得到這個錯誤:
不能設置頭髮送之後。
但我得到的文件下載了500條記錄。
這是我的完整代碼。
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();
}
});
}
};
你能展現完整的代碼?問題不在於你放在這裏。理想狀態下運行並查看問題(嘲笑數據可能是個好主意)。 –
在批量操作完成之前,您正在發回響應。 – bluesman
現在問題已解決。 http://stackoverflow.com/questions/31339652/nodejs-send-partial-response/31398864#31398864 – Rohit