如何用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.
如何下载包含所有内容的文件?
通过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 return WriteStream 对象。
从 WriteStream 的文档中统计有 6 个事件 [close, drain, error, finish, pipe, unpipe]。
在 node.js 世界中,当有 I/O 操作时,您应该始终期望使用回调或寻找 complete/finish 事件。
您的代码结构方式不适合您要执行的操作。首先,您的问题是您在文件流写入完成之前用 res.download()
进行响应。此外,您 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();
如果您对此以及一般的异步处理感到困惑,this is the defacto answer on SO 了解 Node.js
中的异步
我正在尝试使用下面的代码,我可以在服务器上写入文件并且文件有内容,但是当我下载文件时,它是空白的。
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.
如何下载包含所有内容的文件?
通过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 return WriteStream 对象。 从 WriteStream 的文档中统计有 6 个事件 [close, drain, error, finish, pipe, unpipe]。
在 node.js 世界中,当有 I/O 操作时,您应该始终期望使用回调或寻找 complete/finish 事件。
您的代码结构方式不适合您要执行的操作。首先,您的问题是您在文件流写入完成之前用 res.download()
进行响应。此外,您 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();
如果您对此以及一般的异步处理感到困惑,this is the defacto answer on SO 了解 Node.js
中的异步