Skip to content

Commit a5bbb60

Browse files
committed
by default populate content-length header if missing
1 parent 2a6f3f8 commit a5bbb60

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

index.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const fastProxy = require('fast-proxy')
22
const restana = require('restana')
3+
const pump = require('pump')
4+
const toArray = require('stream-to-array')
35

46
const gateway = (opts) => {
57
opts = Object.assign({
@@ -24,6 +26,7 @@ const gateway = (opts) => {
2426
// populating required NOOPS
2527
route.hooks = route.hooks || {}
2628
route.hooks.onRequest = route.hooks.onRequest || onRequestNoOp
29+
route.hooks.onResponse = route.hooks.onResponse || onResponse
2730

2831
// populating pathRegex if missing
2932
route.pathRegex = undefined === route.pathRegex ? opts.pathRegex : String(route.pathRegex)
@@ -52,5 +55,20 @@ const handler = (route, proxy) => async (req, res) => {
5255
}
5356

5457
const onRequestNoOp = (req, res) => { }
58+
const onResponse = async (req, res, stream) => {
59+
if (!res.hasHeader('content-length')) {
60+
try {
61+
const resBuffer = Buffer.concat(await toArray(stream))
62+
res.statusCode = stream.statusCode
63+
res.setHeader('content-length', '' + Buffer.byteLength(resBuffer))
64+
res.end(resBuffer)
65+
} catch (err) {
66+
res.send(err)
67+
}
68+
} else {
69+
res.statusCode = stream.statusCode
70+
pump(stream, res)
71+
}
72+
}
5573

5674
module.exports = gateway

0 commit comments

Comments
 (0)