fs дамп эквивалент в NodeJs?
Задача
Заставить fs (и библиотеки, использующие его) записать все в файлы перед завершением работы приложения.
Фон
Я пишу объект в CSV-файл с помощью пакета npm csv-write-stream.
Как только библиотека закончит написание файла 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
Мое решение этой проблемы, чтобы заставить fs.dump()
или что-то подобное в NodeJs, но после поиска я не нашел ничего похожего.
Вопросы
- Как заставить fs сбросить (вытолкнуть) весь контент в файл перед выходом из приложения?
- Если первый вариант невозможен, есть ли способ подождать, пока приложение напишет, а затем закрыть его?
1 ответ
Я думаю, что ваше предположение верно. Когда вы звоните 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();
});
});