एक्सेल निर्यात:
धाराओं का प्रयोग करें। क्या किया जा सकता है इसका एक मोटा विचार निम्नलिखित है:
-
एक्सेलज मॉड्यूल का प्रयोग करें। क्योंकि इसमें इस सटीक समस्या के लिए एक स्ट्रीमिंग एपीआई है।
var Excel = require('exceljs')
-
चूंकि हम एक डाउनलोड शुरू करने की कोशिश कर रहे हैं। प्रतिक्रिया के लिए उपयुक्त शीर्षलेख लिखें।
res.status(200); res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls'); res.setHeader('Content-type', 'application/vnd.ms-excel');
-
स्ट्रीमिंग एक्सेल लेखक द्वारा समर्थित एक कार्यपुस्तिका बनाएं। लेखक को दी गई स्ट्रीम सर्वर प्रतिक्रिया है।
var options = { stream: res, // write to server response useStyles: false, useSharedStrings: false }; var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
-
अब, आउटपुट स्ट्रीमिंग फ्लो पूरी तरह से सेट हो गया है। इनपुट स्ट्रीमिंग के लिए, एक डीबी ड्राइवर को प्राथमिकता दें जो एक स्ट्रीम के रूप में क्वेरी परिणाम/कर्सर देता है।
-
एक एसिंक फ़ंक्शन को परिभाषित करें जो 1 टेबल को 1 वर्कशीट में डंप करता है।
var tableToSheet = function (name, done) { var str = dbDriver.query('SELECT * FROM ' + name).stream(); var sheet = workbook.addWorksheet(name); str.on('data', function (d) { sheet.addRow(d).commit(); // format object if required }); str.on('end', function () { sheet.commit(); done(); }); str.on('error', function (err) { done(err); }); }
-
अब, async मॉड्यूल की mapSeries का उपयोग करके कुछ db तालिकाओं को निर्यात करने देता है:
async.mapSeries(['cars','planes','trucks'],tableToSheet,function(err){ if(err){ // log error } res.end(); })
सीएसवी निर्यात:
एक टेबल/संग्रह मॉड्यूल के सीएसवी निर्यात के लिए फास्ट-सीएसवी का उपयोग किया जा सकता है:
// response headers as usual
res.status(200);
res.setHeader('Content-disposition', 'attachment; filename=mytable_dump.csv');
res.setHeader('Content-type', 'text/csv');
// create csv stream
var csv = require('fast-csv');
var csvStr = csv.createWriteStream({headers: true});
// open database stream
var dbStr = dbDriver.query('SELECT * from mytable').stream();
// connect the streams
dbStr.pipe(csvStr).pipe(res);
अब आप डेटा को डीबी से एचटीटीपी प्रतिक्रिया में स्ट्रीम कर रहे हैं, इसे फ्लाई पर एक्सएलएस/सीएसवी प्रारूप में परिवर्तित कर रहे हैं। मेमोरी या फ़ाइल में संपूर्ण डेटा को बफर या स्टोर करने की आवश्यकता नहीं है।