diff --git a/.travis.yml b/.travis.yml index b18bae5a..57505cf2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ sudo: false language: node_js node_js: + - '8' - '6' - '4' diff --git a/lib/middleware.js b/lib/middleware.js index 4865b230..344f6790 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -22,10 +22,30 @@ module.exports = function createMiddleware (setup) { var appendFile = createFileAppender(options.fileStrategy, req, options.fields) result.files.forEach(function (file) { - file.stream = fs.createReadStream(file.path) - - file.stream.on('open', function () { + var flushFn = function () { fs.unlink(file.path, function () {}) + if (res) { + res.removeListener('finish', flushFn) + res.removeListener('close', flushFn) + } + } + + if (res) { + res.on('finish', flushFn) + res.on('close', flushFn) + } + + var stream + + Object.defineProperty(file, 'stream', { + get: function () { + if (stream) { + return stream + } + stream = fs.createReadStream(file.path) + stream.on('open', flushFn) + return stream + } }) appendFile(file) diff --git a/package.json b/package.json index dcea6b51..6633db30 100644 --- a/package.json +++ b/package.json @@ -23,20 +23,20 @@ "busboy": "^0.2.13", "fs-temp": "^1.1.1", "on-finished": "^2.3.0", - "pify": "^2.3.0", - "pump": "^1.0.1", + "pify": "^3.0.0", + "pump": "^3.0.0", "stream-file-type": "^0.1.1", - "type-is": "^1.6.13" + "type-is": "^1.6.16" }, "devDependencies": { - "assert-rejects": "^0.1.0", - "express": "^4.14.0", - "form-data": "^2.1.0", - "get-stream": "^2.3.1", - "hasha": "^2.2.0", - "mocha": "^3.1.0", - "standard": "^8.3.0", - "testdata-w3c-json-form": "^0.2.0" + "assert-rejects": "^0.1.1", + "express": "^4.16.3", + "form-data": "^2.3.2", + "get-stream": "^3.0.0", + "hasha": "^3.0.0", + "mocha": "^5.0.4", + "standard": "^11.0.0", + "testdata-w3c-json-form": "^0.2.1" }, "engines": { "node": ">= 4.0.0" diff --git a/test/express-integration.js b/test/express-integration.js index 13a6cbaa..f8e01cae 100644 --- a/test/express-integration.js +++ b/test/express-integration.js @@ -16,10 +16,15 @@ var port = 34279 describe('Express Integration', function () { var app + var server before(function (done) { app = express() - app.listen(port, done) + server = app.listen(port, done) + }) + + after(function (done) { + server.close(done) }) function submitForm (form, path) { @@ -34,15 +39,15 @@ describe('Express Integration', function () { var finished = onFinished(req) resolve(Promise.all([body, finished]).then(function (result) { - return { res: res, body: result[0] } + return {res: res, body: result[0]} })) }) }) } it('should work with express error handling', function () { - var limits = { fileSize: 200 } - var upload = multer({ limits: limits }) + var limits = {fileSize: 200} + var upload = multer({limits: limits}) var router = new express.Router() var form = new FormData()