NodeJs 中的 fs 转储等价物?
fs dump equivalent in NodeJs?
Objective
强制 fs(和使用它的库)在终止应用程序之前将所有内容写入文件。
背景
我正在使用 npm 包 csv-write-stream 将对象写入 CSV 文件。
库完成 CSV 文件的写入后,我想使用 process.exit()
终止我的应用程序。
代码
为了实现上述objective,我写了以下内容:
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();
});
});
Objective
强制 fs(和使用它的库)在终止应用程序之前将所有内容写入文件。
背景
我正在使用 npm 包 csv-write-stream 将对象写入 CSV 文件。
库完成 CSV 文件的写入后,我想使用 process.exit()
终止我的应用程序。
代码
为了实现上述objective,我写了以下内容:
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();
});
});