mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
Merge pull request #679 from RackspaceEmailAndApps/close_proxy
Added functionality to close proxy.
This commit is contained in:
commit
f92f7aea9b
16
README.md
16
README.md
@ -36,6 +36,7 @@ An object will be returned with four values:
|
||||
* web `req, res, [options]` (used for proxying regular HTTP(S) requests)
|
||||
* ws `req, socket, head, [options]` (used for proxying WS(S) requests)
|
||||
* listen `port` (a function that wraps the object in a webserver, for your convenience)
|
||||
* close `[callback]` (a function that closes the inner webserver and stops listening on given port)
|
||||
|
||||
Is it then possible to proxy requests by calling these functions
|
||||
|
||||
@ -322,6 +323,21 @@ If you are using the `proxyServer.listen` method, the following options are also
|
||||
* **xfwd**: true/false, adds x-forward headers
|
||||
* **toProxy**: passes the absolute URL as the `path` (useful for proxying to proxies)
|
||||
|
||||
### Shutdown
|
||||
|
||||
* When testing or running server within another program it may be necessary to close the proxy.
|
||||
* This will stop the proxy from accepting new connections.
|
||||
|
||||
```js
|
||||
var proxy = new httpProxy.createProxyServer({
|
||||
target: {
|
||||
host: 'localhost',
|
||||
port: 1337
|
||||
}
|
||||
});
|
||||
|
||||
proxy.close();
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
|
||||
@ -134,6 +134,21 @@ ProxyServer.prototype.listen = function(port, hostname) {
|
||||
return this;
|
||||
};
|
||||
|
||||
ProxyServer.prototype.close = function(callback) {
|
||||
if (this._server) {
|
||||
// Wrap callback to nullify server after all open connections are closed.
|
||||
var callback_wrapper = function() {
|
||||
this._server = null;
|
||||
|
||||
if (callback) {
|
||||
callback(arguments);
|
||||
}
|
||||
};
|
||||
|
||||
this._server.close(callback_wrapper);
|
||||
}
|
||||
};
|
||||
|
||||
ProxyServer.prototype.before = function(type, passName, callback) {
|
||||
if (type !== 'ws' && type !== 'web') {
|
||||
throw new Error('type must be `web` or `ws`');
|
||||
|
||||
@ -52,7 +52,7 @@ describe('lib/http-proxy.js', function() {
|
||||
expect(req.method).to.eql('GET');
|
||||
expect(req.headers.host.split(':')[1]).to.eql(ports.proxy);
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
});
|
||||
|
||||
@ -73,7 +73,7 @@ describe('lib/http-proxy.js', function() {
|
||||
expect(req.headers['x-forwarded-for']).to.eql('127.0.0.1');
|
||||
expect(req.headers.host.split(':')[1]).to.eql(ports.proxy);
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
});
|
||||
|
||||
@ -119,7 +119,7 @@ describe('lib/http-proxy.js', function() {
|
||||
|
||||
res.on('end', function () {
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
});
|
||||
}).end();
|
||||
@ -136,7 +136,7 @@ describe('lib/http-proxy.js', function() {
|
||||
proxy.on('error', function (err) {
|
||||
expect(err).to.be.an(Error);
|
||||
expect(err.code).to.be('ECONNREFUSED');
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
})
|
||||
|
||||
@ -181,7 +181,7 @@ describe('lib/http-proxy.js', function() {
|
||||
testReq.on('error', function (e) {
|
||||
expect(e).to.be.an(Error);
|
||||
expect(e.code).to.be.eql('ECONNRESET');
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
source.close();
|
||||
done();
|
||||
});
|
||||
@ -228,7 +228,7 @@ describe('lib/http-proxy.js', function() {
|
||||
// expect(events).to.contain('http-proxy:outgoing:web:begin');
|
||||
// expect(events).to.contain('http-proxy:outgoing:web:end');
|
||||
// source.close();
|
||||
// proxyServer._server.close();
|
||||
// proxyServer.close();
|
||||
// done();
|
||||
// });
|
||||
// }).end();
|
||||
@ -253,7 +253,7 @@ describe('lib/http-proxy.js', function() {
|
||||
client.on('message', function (msg) {
|
||||
expect(msg).to.be('Hello over websockets');
|
||||
client.close();
|
||||
proxyServer._server.close();
|
||||
proxyServer.close();
|
||||
destiny.close();
|
||||
done();
|
||||
});
|
||||
@ -284,7 +284,7 @@ describe('lib/http-proxy.js', function() {
|
||||
proxy.on('error', function (err) {
|
||||
expect(err).to.be.an(Error);
|
||||
expect(err.code).to.be('ECONNREFUSED');
|
||||
proxyServer._server.close();
|
||||
proxyServer.close();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@ -307,7 +307,7 @@ describe('lib/http-proxy.js', function() {
|
||||
|
||||
client.on('outgoing', function (data) {
|
||||
expect(data).to.be('Hello over websockets');
|
||||
proxyServer._server.close();
|
||||
proxyServer.close();
|
||||
server.close();
|
||||
done();
|
||||
});
|
||||
|
||||
@ -53,7 +53,7 @@ describe('lib/http-proxy.js', function() {
|
||||
|
||||
res.on('end', function () {
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
})
|
||||
}).end();
|
||||
@ -93,7 +93,7 @@ describe('lib/http-proxy.js', function() {
|
||||
|
||||
res.on('end', function () {
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
});
|
||||
}).end();
|
||||
@ -138,7 +138,7 @@ describe('lib/http-proxy.js', function() {
|
||||
|
||||
res.on('end', function () {
|
||||
source.close();
|
||||
proxy._server.close();
|
||||
proxy.close();
|
||||
done();
|
||||
})
|
||||
}).end();
|
||||
@ -219,4 +219,4 @@ describe('lib/http-proxy.js', function() {
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user