我需要發送來自nodejs的部分響應,但此代碼不起作用。 一次它將從數據庫中取出500條記錄,然後逐個處理每條記錄。我想發送來自node.js的部分響應。如果我將數據存儲在數組中,則會發生緩衝區溢出錯誤。Nodejs發送部分響應不起作用
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();
}
});
}
};
也許你應該在調用'res.write'之前設置標題? – marekful
我也試過這個東西,但它不起作用 – Rohit
你應該嘗試流式傳輸響應。除非您需要將請求以X組的形式批處理,否則您可以使用'through' /'through2'輕鬆地將每個項目從貓鼬處理到處理邏輯,並將其傳送到響應中。 –