Я использовал модуль zlib NodeJS для хранения данных в журнале. Проблема в том, что когда я нажимаю Ctrl + C в своем приложении NodeJS, я не могу заставить модуль zlib правильно завершить поток. Таким образом, после выхода из сервера, если я наберу:
$ zcat test.txt.gz
Я получаю:
gzip: test.txt.gz: unexpected end of file
Код здесь:
const fs = require('fs');
const http = require('http');
const zlib = require('zlib');
const gzlog = zlib.createGzip();
const gzfile = fs.createWriteStream('test.txt.gz');
gzlog.pipe(gzfile);
process.on('SIGINT', function() {
console.log("Caught interrupt signal");
gzfile.on('close', function() {
console.log('process.exit()');
process.exit();
});
gzfile.on('finish', function() {
console.log('gzfile on finish');
gzfile.close();
});
gzlog.on('close', function() {
console.log('gzlog on close');
gzfile.end();
});
gzlog.on('finish', function() {
console.log('gzlog on finish');
gzlog.close();
});
server.close(function() {
gzlog.flush(function() {
console.log('gzlog on flush');
gzlog.end();
});
});
});
process.on('exit', function() {
console.log('exiting');
});
const server = http.createServer(function() {
}).listen(3000);
В чем проблема в моем коде? Что я делаю не так? По крайней мере обработчик SIGINT исключен:
$ node server.js
^CCaught interrupt signal
gzlog on flush
gzlog on finish
gzlog on close
gzfile on finish
process.exit()
exiting