Skip to content

Commit 615cb74

Browse files
committed
feat: allow custom proxyReq
1 parent 8d3795a commit 615cb74

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

README.md

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,24 @@ server.on('request', (req, res) => {
9494
})
9595
```
9696

97+
#### Follow Redirects
98+
99+
```javascript
100+
const http = require('follow-redirects').http
101+
102+
server.on('request', (req, res) => {
103+
proxy.web(req, res, {
104+
hostname: 'localhost'
105+
port: 9000,
106+
onReq: (req, options) => http.request(options)
107+
}, err => {
108+
if (err) {
109+
console.error('proxy error', err)
110+
}
111+
})
112+
})
113+
```
114+
97115
#### web (req, res, options, [callback])
98116

99117
- `req`: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#http2_class_http2_http2serverrequest)
@@ -124,7 +142,7 @@ See [`upgrade`](https://nodejs.org/api/http.html#http_event_upgrade)
124142
- `proxyTimeout`: Proxy [`http.request(options)`](https://nodejs.org/api/http.html#http_http_request_options_callback) timeout
125143
- `proxyName`: Proxy name used for **Via** header
126144
- `timeout`: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#http2_class_http2_http2serverrequest) timeout
127-
- `onReq(req, options)`: Called before proxy request
145+
- `onReq(req, options)`: Called before proxy request. If returning a truthy value it will be used as the request.
128146
- `req`: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#http2_class_http2_http2serverrequest)
129147
- `options`: Options passed to [`http.request(options)`](https://nodejs.org/api/http.html#http_http_request_options_callback)
130148
- `onRes(req, resOrSocket)`: Called before proxy response
@@ -198,7 +216,7 @@ See [`request`](https://nodejs.org/api/http.html#http_event_request)
198216
- `proxyTimeout`: Proxy [`http.request(options)`](https://nodejs.org/api/http.html#http_http_request_options_callback) timeout
199217
- `proxyName`: Proxy name used for **Via** header
200218
- `timeout`: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#http2_class_http2_http2serverrequest) timeout
201-
- `onReq(req, options)`: Called before proxy request
219+
- `onReq(req, options)`: Called before proxy request. If returning a truthy value it will be used as the request.
202220
- `req`: [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) or [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#http2_class_http2_http2serverrequest)
203221
- `options`: Options passed to [`http.request(options)`](https://nodejs.org/api/http.html#http_http_request_options_callback)
204222
- `onRes(req, headers)`: Called before proxy response

index.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,15 @@ function proxy (req, res, head, {
135135
timeout: proxyTimeout
136136
}
137137

138+
let proxyReq
139+
138140
if (onReq) {
139-
onReq(req, options)
141+
proxyReq = onReq(req, options)
140142
}
141143

142-
const proxyReq = http.request(options)
144+
if (!proxyReq) {
145+
proxyReq = http.request(options)
146+
}
143147

144148
proxyReq[kReq] = req
145149
proxyReq[kRes] = res
@@ -165,9 +169,7 @@ function proxy (req, res, head, {
165169
.on('error', onFinish)
166170
.pipe(proxyReq)
167171
.on('error', onFinish)
168-
// NOTE http.ClientRequest emits "socket hang up" error when aborted
169-
// before having received a response, i.e. there is no need to listen for
170-
// proxyReq.on('aborted', ...).
172+
.on('aborted', onProxyAborted)
171173
.on('timeout', onProxyTimeout)
172174
.on('response', onProxyResponse)
173175
.on('upgrade', onProxyUpgrade)

0 commit comments

Comments
 (0)