diff --git a/lib/make-middleware.js b/lib/make-middleware.js index ee509886..614fb616 100644 --- a/lib/make-middleware.js +++ b/lib/make-middleware.js @@ -26,8 +26,16 @@ function makeMiddleware (setup) { var preservePath = options.preservePath var defParamCharset = options.defParamCharset + var existingBody = req.body + req.body = Object.create(null) + if (existingBody && typeof existingBody === 'object') { + Object.keys(existingBody).forEach(function (key) { + req.body[key] = existingBody[key] + }) + } + var busboy var appender = null var isDone = false diff --git a/test/fields.js b/test/fields.js index 1bdf6459..23df43d4 100644 --- a/test/fields.js +++ b/test/fields.js @@ -34,6 +34,37 @@ describe('Fields', function () { }) }) + it('should preserve existing body properties', function (done) { + var form = new FormData() + + form.append('name', 'Multer') + + form.getLength(function (err, length) { + if (err) return done(err) + + var req = new stream.PassThrough() + + form.pipe(req) + req.body = { + auth: true, + limit: 66 + } + req.headers = { + 'content-type': 'multipart/form-data; boundary=' + form.getBoundary(), + 'content-length': length + } + + parser(req, null, function (err) { + assert.ifError(err) + assert.strictEqual(Object.getPrototypeOf(req.body), null) + assert.strictEqual(req.body.auth, true) + assert.strictEqual(req.body.limit, 66) + assert.strictEqual(req.body.name, 'Multer') + done() + }) + }) + }) + it('should process empty fields', function (done) { var form = new FormData()