Skip to content

Commit 01883e2

Browse files
pavelLinusU
authored andcommitted
Add .none function for uploading fields only (#372)
Fixes #278
1 parent da9062a commit 01883e2

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ Example:
131131
]
132132
```
133133

134+
#### `.none()`
135+
136+
Accept only text fields. If any file upload is made, error with code
137+
"LIMIT\_UNEXPECTED\_FILE" will be issued. This is the same as doing `upload.fields([])`.
138+
134139
#### `.any()`
135140

136141
Accepts all files that comes over the wire. An array of files will be stored in

index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ Multer.prototype.fields = function (fields) {
6666
return this._makeMiddleware(fields, 'OBJECT')
6767
}
6868

69+
Multer.prototype.none = function () {
70+
return this._makeMiddleware([], 'NONE')
71+
}
72+
6973
Multer.prototype.any = function () {
7074
function setup () {
7175
return {

lib/file-appender.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ function FileAppender (strategy, req) {
1010
this.req = req
1111

1212
switch (strategy) {
13+
case 'NONE': break
1314
case 'VALUE': break
1415
case 'ARRAY': req.files = []; break
1516
case 'OBJECT': req.files = Object.create(null); break
@@ -23,6 +24,7 @@ FileAppender.prototype.insertPlaceholder = function (file) {
2324
}
2425

2526
switch (this.strategy) {
27+
case 'NONE': break
2628
case 'VALUE': break
2729
case 'ARRAY': this.req.files.push(placeholder); break
2830
case 'OBJECT':
@@ -39,6 +41,7 @@ FileAppender.prototype.insertPlaceholder = function (file) {
3941

4042
FileAppender.prototype.removePlaceholder = function (placeholder) {
4143
switch (this.strategy) {
44+
case 'NONE': break
4245
case 'VALUE': break
4346
case 'ARRAY': arrayRemove(this.req.files, placeholder); break
4447
case 'OBJECT':

test/none.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* eslint-env mocha */
2+
3+
var assert = require('assert')
4+
5+
var util = require('./_util')
6+
var multer = require('../')
7+
var FormData = require('form-data')
8+
9+
describe('None', function () {
10+
var parser
11+
12+
before(function () {
13+
parser = multer().none()
14+
})
15+
16+
it('should not allow file uploads', function (done) {
17+
var form = new FormData()
18+
19+
form.append('key1', 'val1')
20+
form.append('key2', 'val2')
21+
form.append('file', util.file('small0.dat'))
22+
23+
util.submitForm(parser, form, function (err, req) {
24+
assert.ok(err)
25+
assert.equal(err.code, 'LIMIT_UNEXPECTED_FILE')
26+
assert.equal(req.files, undefined)
27+
assert.equal(req.body['key1'], 'val1')
28+
assert.equal(req.body['key2'], 'val2')
29+
done()
30+
})
31+
})
32+
33+
it('should handle text fields', function (done) {
34+
var form = new FormData()
35+
36+
form.append('key1', 'val1')
37+
form.append('key2', 'val2')
38+
39+
util.submitForm(parser, form, function (err, req) {
40+
assert.ifError(err)
41+
assert.equal(req.files, undefined)
42+
assert.equal(req.body['key1'], 'val1')
43+
assert.equal(req.body['key2'], 'val2')
44+
done()
45+
})
46+
})
47+
})

0 commit comments

Comments
 (0)