Skip to content

Commit 2417c1d

Browse files
Vohmyanin Sergey VasilevichDelagen
Vohmyanin Sergey Vasilevich
authored andcommitted
request stream by demand, fix fs.unlink to call when response send to client or stream open
1 parent c4b223e commit 2417c1d

File tree

4 files changed

+44
-18
lines changed

4 files changed

+44
-18
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
sudo: false
22
language: node_js
33
node_js:
4+
- '8'
45
- '6'
56
- '4'

lib/middleware.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,30 @@ module.exports = function createMiddleware (setup) {
2222
var appendFile = createFileAppender(options.fileStrategy, req, options.fields)
2323

2424
result.files.forEach(function (file) {
25-
file.stream = fs.createReadStream(file.path)
26-
27-
file.stream.on('open', function () {
25+
var flushFn = function () {
2826
fs.unlink(file.path, function () {})
27+
if (res) {
28+
res.removeListener('finish', flushFn)
29+
res.removeListener('close', flushFn)
30+
}
31+
}
32+
33+
if (res) {
34+
res.on('finish', flushFn)
35+
res.on('close', flushFn)
36+
}
37+
38+
var stream
39+
40+
Object.defineProperty(file, 'stream', {
41+
get: function () {
42+
if (stream) {
43+
return stream
44+
}
45+
stream = fs.createReadStream(file.path)
46+
stream.on('open', flushFn)
47+
return stream
48+
}
2949
})
3050

3151
appendFile(file)

package.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,20 @@
2323
"busboy": "^0.2.13",
2424
"fs-temp": "^1.1.1",
2525
"on-finished": "^2.3.0",
26-
"pify": "^2.3.0",
27-
"pump": "^1.0.1",
26+
"pify": "^3.0.0",
27+
"pump": "^3.0.0",
2828
"stream-file-type": "^0.1.1",
29-
"type-is": "^1.6.13"
29+
"type-is": "^1.6.16"
3030
},
3131
"devDependencies": {
32-
"assert-rejects": "^0.1.0",
33-
"express": "^4.14.0",
34-
"form-data": "^2.1.0",
35-
"get-stream": "^2.3.1",
36-
"hasha": "^2.2.0",
37-
"mocha": "^3.1.0",
38-
"standard": "^8.3.0",
39-
"testdata-w3c-json-form": "^0.2.0"
32+
"assert-rejects": "^0.1.1",
33+
"express": "^4.16.3",
34+
"form-data": "^2.3.2",
35+
"get-stream": "^3.0.0",
36+
"hasha": "^3.0.0",
37+
"mocha": "^5.0.4",
38+
"standard": "^11.0.0",
39+
"testdata-w3c-json-form": "^0.2.1"
4040
},
4141
"engines": {
4242
"node": ">= 4.0.0"

test/express-integration.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ var port = 34279
1616

1717
describe('Express Integration', function () {
1818
var app
19+
var server
1920

2021
before(function (done) {
2122
app = express()
22-
app.listen(port, done)
23+
server = app.listen(port, done)
24+
})
25+
26+
after(function (done) {
27+
server.close(done)
2328
})
2429

2530
function submitForm (form, path) {
@@ -34,15 +39,15 @@ describe('Express Integration', function () {
3439
var finished = onFinished(req)
3540

3641
resolve(Promise.all([body, finished]).then(function (result) {
37-
return { res: res, body: result[0] }
42+
return {res: res, body: result[0]}
3843
}))
3944
})
4045
})
4146
}
4247

4348
it('should work with express error handling', function () {
44-
var limits = { fileSize: 200 }
45-
var upload = multer({ limits: limits })
49+
var limits = {fileSize: 200}
50+
var upload = multer({limits: limits})
4651
var router = new express.Router()
4752
var form = new FormData()
4853

0 commit comments

Comments
 (0)