diff --git a/src/models/file.js b/src/models/file.js index 3d6e5d7..8396f2e 100644 --- a/src/models/file.js +++ b/src/models/file.js @@ -22,7 +22,7 @@ const dest = path.join(basedir, 'public/csv'); function generateFilePath(filename) { return { filepath: path.join(dest, `${filename}-${Date.now()}.csv`), - generatedpath: path.join('csv', `${filename}-generated-${Date.now()}.csv`), + generatedpath: path.join(dest, `${filename}-generated-${Date.now()}.csv`), }; } @@ -122,6 +122,8 @@ class File { // create a parse method which read the file and return a stream parse(columns) { const stream = new PassThrough(); + const fileStream = fs.createWriteStream(this.generatedpath); + stream.pipe(fileStream); // check if columns is valid if (!columns || !columns.length) { @@ -174,11 +176,15 @@ class File { .on('error', (err) => { // Emit a parse.error event with the error emitter.emit('parse.error', { url: this.url, filepath: this.filepath, error: err.message }); + + fileStream.end(); + fs.unlink(this.generatedpath, () => {}); }) .on('end', () => { // Emit a parse.end event with the url and filepath - emitter.emit('parse.end', { url: this.url, filepath: this.filepath, count: count - 1 }); stream.end(); + fileStream.end(); + emitter.emit('parse.end', { url: this.url, filepath: this.filepath, count: count - 1, generated: path.basename(this.generatedpath) }); }); return stream; diff --git a/src/subscribers/ioSubscriber.js b/src/subscribers/ioSubscriber.js index ab26d1a..f41d0dc 100644 --- a/src/subscribers/ioSubscriber.js +++ b/src/subscribers/ioSubscriber.js @@ -31,8 +31,8 @@ const configure = (socket) => { }); // Create a new listener for the parse.end event - emitter.on('parse.end', ({ filepath, columns, count }) => { - socket.emit('parse.end', { message: 'Traitement terminé' }); + emitter.on('parse.end', ({ filepath, columns, count, generated }) => { + socket.emit('parse.end', { message: 'Traitement terminé', generated }); }); // Create a new listener for the parse.error event