El nodo (express.js) next () se llama antes del final de la secuencia

Tengo la siguiente función de middleware

var bodyParser = require('body-parser'), fs = require('fs'); module.exports = function(req, res, next) { // Add paths to this array to allow binary uploads var pathsAllowingBinaryBody = [ '/api2/information/upload', '/api2/kpi/upload', ]; if (pathsAllowingBinaryBody.indexOf(req._parsedUrl.pathname) !== -1) { var date = new Date(); req.filePath = "uploads/" + date.getTime() + "_" + date.getMilliseconds() + "_" + Math.floor(Math.random() * 1000000000) + "_" + parseInt(req.headers['content-length']); var writeStream = fs.createWriteStream(req.filePath); req.on('data', function(chunk) { writeStream.write(chunk); }); req.on('end', function() { writeStream.end(); next(); }); } else { bodyParser.json()(req, res, next); } }; 

Los archivos se están transfiriendo correctamente, pero lamentablemente el next() en el

 req.on('end', function() { writeStream.end(); next(); }); 

se llama antes de que termine de escribir todos los datos en el nuevo archivo.

Mi pregunta es ¿qué estoy haciendo mal? ¿Y cómo puedo arreglarlo?

Utilice el evento close del flujo de archivos grabable para saber cuándo se ha cerrado el descriptor del archivo.

Reemplace esto:

 var writeStream = fs.createWriteStream(req.filePath); req.on('data', function(chunk) { writeStream.write(chunk); }); req.on('end', function() { writeStream.end(); next(); }); 

con este:

 req.pipe(fs.createWriteStream(req.filePath)).on('close', next);