diff --git a/lib/make-middleware.js b/lib/make-middleware.js index ee509886..192a01a0 100644 --- a/lib/make-middleware.js +++ b/lib/make-middleware.js @@ -7,14 +7,14 @@ var MulterError = require('./multer-error') var FileAppender = require('./file-appender') var removeUploadedFiles = require('./remove-uploaded-files') -function drainStream (stream) { +function drainStream(stream) { stream.on('readable', () => { - while (stream.read() !== null) {} + while (stream.read() !== null) { } }) } -function makeMiddleware (setup) { - return function multerMiddleware (req, res, next) { +function makeMiddleware(setup) { + return function multerMiddleware(req, res, next) { if (!is(req, ['multipart'])) return next() var options = setup() @@ -36,9 +36,9 @@ function makeMiddleware (setup) { var pendingWrites = new Counter() var uploadedFiles = [] - function done (err) { + function done(err) { var called = false - function onFinished () { + function onFinished() { if (called) return called = true next(err) @@ -69,16 +69,16 @@ function makeMiddleware (setup) { next(err) } - function indicateDone () { + function indicateDone() { if (readFinished && pendingWrites.isZero() && !errorOccured) done() } - function abortWithError (uploadError, skipPendingWait) { + function abortWithError(uploadError, skipPendingWait) { if (errorOccured) return errorOccured = true - function finishAbort () { - function remove (file, cb) { + function finishAbort() { + function remove(file, cb) { storage._removeFile(req, file, cb) } @@ -97,11 +97,11 @@ function makeMiddleware (setup) { } } - function abortWithCode (code, optionalField) { + function abortWithCode(code, optionalField) { abortWithError(new MulterError(code, optionalField)) } - function handleRequestFailure (err) { + function handleRequestFailure(err) { if (isDone) return if (busboy) { req.unpipe(busboy) @@ -208,7 +208,7 @@ function makeMiddleware (setup) { fileStream.on('limit', function () { aborting = true - abortWithCode('LIMIT_FILE_SIZE', fieldname) + abortWithError(new MulterError('LIMIT_FILE_SIZE', fieldname, filename)) }) storage._handleFile(req, file, function (err, info) { diff --git a/lib/multer-error.js b/lib/multer-error.js index d56b00e8..0395601e 100644 --- a/lib/multer-error.js +++ b/lib/multer-error.js @@ -11,12 +11,13 @@ var errorMessages = { MISSING_FIELD_NAME: 'Field name missing' } -function MulterError (code, field) { +function MulterError (code, field, filename) { Error.captureStackTrace(this, this.constructor) this.name = this.constructor.name this.message = errorMessages[code] this.code = code if (field) this.field = field + if (filename) this.filename = filename } util.inherits(MulterError, Error) diff --git a/test/error-handling.js b/test/error-handling.js index 597e8039..ff70f5a2 100644 --- a/test/error-handling.js +++ b/test/error-handling.js @@ -62,6 +62,7 @@ describe('Error Handling', function () { util.submitForm(parser, form, function (err, req) { assert.strictEqual(err.code, 'LIMIT_FILE_SIZE') assert.strictEqual(err.field, 'small0') + assert.strictEqual(err.filename, 'small0.dat') done() }) }) @@ -434,11 +435,6 @@ describe('Error Handling', function () { }) it('should not overflow call stack when cleaning up many files (memory storage sync remove)', function (done) { - // - without setImmediate in remove-uploaded-files, synchronous _removeFile (e.g. memory storage) - // causes handleFile(0) -> remove -> cb() -> handleFile(1) -> ... in one stack, - // leading to "Maximum call stack size exceeded" - // - use enough files to exceed typical node stack depth (~10k - 30k) - this.timeout(10 * 1000) var fileCount = 25000 @@ -459,4 +455,4 @@ describe('Error Handling', function () { done() }) }) -}) +}) \ No newline at end of file diff --git a/test/functionality.js b/test/functionality.js index a4db245a..ec351173 100644 --- a/test/functionality.js +++ b/test/functionality.js @@ -129,8 +129,8 @@ describe('Functionality', function () { util.submitForm(parser, form, function (err, req) { assert.ifError(err) assert.strictEqual(req.files.length, 2) - assert.ok(req.files[0].path.indexOf('/testforme-') >= 0) - assert.ok(req.files[1].path.indexOf('/testforme-') >= 0) + assert.ok(req.files[0].path.indexOf('testforme-') >= 0) + assert.ok(req.files[1].path.indexOf('testforme-') >= 0) done() }) })