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, но после поиска я не нашел ничего похожего.

Вопросы

  1. Как заставить fs сбросить (вытолкнуть) весь контент в файл перед выходом из приложения?
  2. Если первый вариант невозможен, есть ли способ подождать, пока приложение напишет, а затем закрыть его?

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();
  });
});
Другие вопросы по тегам