Skip to content

Commit 20554cd

Browse files
Streams fix
1 parent 2bd70cf commit 20554cd

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "uquik",
3-
"version": "1.0.45",
3+
"version": "1.0.46",
44
"description": "uQuik HTTP(S) framework",
55
"main": "index.js",
66
"scripts": {

src/Response.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ class Response extends Writable {
256256
this.streaming = true
257257

258258
// Ensure response has been initiated before writing any chunks
259-
this._initiate_response()
259+
if (!this.initiated) this._initiate_response()
260260

261261
// Attempt to write the chunk to the client
262262
if (this.raw_response.write(chunk)) {
@@ -269,10 +269,6 @@ class Response extends Writable {
269269
// Wait for this chunk to be written to the client
270270
let drained = false
271271
return this.drain(() => {
272-
if (this.completed) {
273-
callback()
274-
return true
275-
}
276272
// Call the callback once the chunk is drained
277273
if (!drained) {
278274
drained = true

src/StaticFiles.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const fs = require('fs')
22
const path = require('path')
33
const zlib = require('zlib')
4+
const { pipeline } = require('readable-stream')
45

56
const mimeTypes = require('./helpers/mime-types')
67
const accepts = require('./helpers/accepts')
@@ -24,7 +25,7 @@ const resolveFile = (file, indexFile = '') => {
2425

2526
const destroy = (dataTransfer) => {
2627
if (dataTransfer.readable && !dataTransfer.readable.destroyed) dataTransfer.readable.destroy()
27-
if (dataTransfer.writable && !dataTransfer.writable.destroyed) dataTransfer.writable.destroy()
28+
if (dataTransfer.transform && !dataTransfer.transform.destroyed) dataTransfer.transform.destroy()
2829
}
2930

3031
const StaticFiles = (options = {}) => {
@@ -39,9 +40,10 @@ const StaticFiles = (options = {}) => {
3940
return async (req, res) => {
4041
const dataTransfer = {
4142
readable: null,
42-
writable: null
43+
transform: null
4344
}
44-
res.on('abort', () => destroy(dataTransfer))
45+
46+
res.once('abort', () => destroy(dataTransfer))
4547

4648
if (req.method !== 'GET' && req.method !== 'HEAD') return res.status(405).header('Allow', 'GET, HEAD').vary('Accept-Encoding').send()
4749

@@ -115,6 +117,8 @@ const StaticFiles = (options = {}) => {
115117
end
116118
})
117119

120+
dataTransfer.readable.once('end', () => !dataTransfer.readable.destroyed && dataTransfer.readable.destroy())
121+
118122
res
119123
.header('Content-Type', mimeType)
120124
.header('Last-Modified', timeUTC)
@@ -123,15 +127,13 @@ const StaticFiles = (options = {}) => {
123127
if (compression) {
124128
res.header('Content-Encoding', compression)
125129

126-
dataTransfer.writable = zlib.createGzip()
130+
dataTransfer.transform = zlib.createGzip()
127131

128-
dataTransfer.writable.once('end', () => !dataTransfer.writable.destroyed && dataTransfer.writable.destroy())
132+
dataTransfer.transform.once('end', () => !dataTransfer.transform.destroyed && dataTransfer.transform.destroy())
129133

130-
dataTransfer.readable
131-
.pipe(dataTransfer.writable)
132-
.pipe(res)
134+
pipeline(dataTransfer.readable, dataTransfer.transform, res, (error) => res.throw(error))
133135
} else {
134-
return res.stream(dataTransfer.readable, size)
136+
res.stream(dataTransfer.readable, size)
135137
}
136138
} catch (ex) {
137139
if (ex.status && ex.status === 404) return res.master_context.handlers.get('on_not_found')(req, res)

0 commit comments

Comments
 (0)