Skip to content

Commit e0b48f3

Browse files
committed
update onResponse hook
1 parent 12701c0 commit e0b48f3

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

README.md

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,40 @@ const pump = require('pump')
111111
const toArray = require('stream-to-array')
112112

113113
const onResponse = async (req, res, stream) => {
114-
if (!res.hasHeader('content-length')) {
114+
const TRANSFER_ENCODING_HEADER_NAME = 'transfer-encoding'
115+
const chunked = stream.headers[TRANSFER_ENCODING_HEADER_NAME]
116+
? stream.headers[TRANSFER_ENCODING_HEADER_NAME].endsWith('chunked')
117+
: false
118+
119+
if (req.headers.connection === 'close' && chunked) {
115120
try {
116-
const resBuffer = Buffer.concat(await toArray(stream))
117-
res.statusCode = stream.statusCode
118-
res.setHeader('content-length', '' + Buffer.byteLength(resBuffer))
119-
res.end(resBuffer)
121+
// remove transfer-encoding header
122+
const transferEncoding = stream.headers[TRANSFER_ENCODING_HEADER_NAME].replace(/(,( )?)?chunked/, '')
123+
if (transferEncoding) {
124+
res.setHeader(TRANSFER_ENCODING_HEADER_NAME, transferEncoding)
125+
} else {
126+
res.removeHeader(TRANSFER_ENCODING_HEADER_NAME)
127+
}
128+
129+
if (!stream.headers['content-length']) {
130+
// pack all pieces into 1 buffer to calculate content length
131+
const resBuffer = Buffer.concat(await toArray(stream))
132+
133+
// add content-length header and send the merged response buffer
134+
res.setHeader('content-length', '' + Buffer.byteLength(resBuffer))
135+
res.statusCode = stream.statusCode
136+
res.end(resBuffer)
137+
138+
return
139+
}
120140
} catch (err) {
121-
res.send(err)
141+
res.statusCode = 500
142+
res.end(err.message)
122143
}
123-
} else {
124-
res.statusCode = stream.statusCode
125-
pump(stream, res)
126144
}
145+
146+
res.statusCode = stream.statusCode
147+
pump(stream, res)
127148
}
128149
```
129150
## The "*GET /services.json*" endpoint

0 commit comments

Comments
 (0)