簡體   English   中英

如何使用nodejs將數組obj寫入文件

[英]how to write array obj into file with nodejs

我正在嘗試使用下面的代碼,我可以在服務器上寫入文件並且文件有內容,但是當我下載文件時,它是空白的。

 var file = fs.createWriteStream('./tmp/text.txt'); file.on('error', function(err) { console.log(err) }); rows.forEach(function(v) { file.write(v + "\r\n"); productExport.DeleteProduct(v.ProductId, function(err){ if(err) throw err; }); }); file.end(); var file = "./tmp/text.txt"; res.download(file); // Set disposition and send it.

如何下載包含所有內容的文件?

您的代碼結構方式與您嘗試執行的操作不正確。 首先,您的問題是您在寫入文件 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 之前使用res.download()進行響應。 此外,您在同一個 scope 中初始化了兩次var file ,這也不正確。

 var file = "./tmp/text.txt"; var writeStream = fs.createWriteStream(file); writeStream.on('error', err => console.log ); writeStream.on('finish', () => { return res.download(file); // Set disposition and send it. }); rows.forEach((v) => { writeStream.write(v + "\r\n"); productExport.DeleteProduct(v.ProductId, function(err){ if(err) throw err; }); }); writeStream.end();

如果您對此感到困惑,也許是一般的異步處理, 這是關於 SO 理解 Node.js 中的異步的事實上的答案

通過 I/O 將數據寫入文件是一種異步操作。 您必須等待 WriteStream 完成才能下載文件。

 var file = fs.createWriteStream('./tmp/text.txt'); file.on('error', function(err) { console.log(err) }); rows.forEach(function(v) { file.write(v + "\r\n"); productExport.DeleteProduct(v.ProductId, function(err){ if(err) throw err; }); }); file.end(); file.on('finish', function() { var file = "./tmp/text.txt"; res.download(file); // Set disposition and send it. });

額外的信息:

FileSystem#createWriteStream返回 WriteStream object。 WriteStream的文檔中統計,有 6 個事件 [關閉、排水、錯誤、完成、pipe、取消管道]。

在 node.js 世界中,當有 I/O 操作時,您應該始終期望使用回調或尋找完成/完成事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM