当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 在NodeJs中转储等效的fs?

来源:互联网 收集:自由互联 发布时间:2021-06-16
目的 强制fs(以及使用它的库)在终止应用程序之前将所有内容写入文件. 背景 我正在使用npm包csv-write-stream将对象写入CSV文件. 一旦库完成了CSV文件的编写,我想使用process.exit()终止我的应
目的

强制fs(以及使用它的库)在终止应用程序之前将所有内容写入文件.

背景

我正在使用npm包csv-write-stream将对象写入CSV文件.

一旦库完成了CSV文件的编写,我想使用process.exit()终止我的应用程序.

为实现上述目标,我写了以下内容:

let writer = csvWriter({
  headers: ['country', 'postalCode']
});

writer.pipe(fs.createWriteStream('myOutputFile.csv'));

//Very big array with a lot of postal code info
let currCountryCodes = [{country: Portugal, postalCode: '2950-286'}, {country: Barcelona, postalCode: '08013'}];

for (let j = 0; j < currCountryCodes.length; j++) {
  writer.write(currCountryCodes[j]);
}

writer.end(function() {
  console.log('=== CSV written successfully, stopping application ===');
  process.exit();
});

问题

这里的问题是,如果我执行process.exit(),库就没有时间写入文件,文件将为空.

由于库使用fs,我对这个问题的解决方法是强制在NodeJs中使用fs.dump()或类似的东西,但是在搜索之后,我发现没有类似的东西.

问题

>在退出应用程序之前,如何强制fs将所有内容转储(推送)到文件中?
>如果第一个选项不可用,是否有办法等待应用程序写入然后关闭它?

我想你的猜测是正确的.
当您调用process.exit()时,管道写入流尚未完成写入.

如果你真的想明确地终止服务器,那就可以了.

let r = fs.createWriteStream('myOutputFile.csv');
writer.pipe(r);

...

writer.end(function() {
  r.end(function() {
    console.log('=== CSV written successfully, stopping application ===');
    process.exit();
  });
});
网友评论