diff options
author | Kat Marchán <kzm@sykosomatic.org> | 2016-09-22 07:59:37 -0700 |
---|---|---|
committer | Jeremiah Senkpiel <fishrock123@rocketmail.com> | 2016-09-27 16:39:27 -0400 |
commit | d44a9eb11b34900b44a9d135a2c965346fff702e (patch) | |
tree | a8d074826fb51641f5a7f24978e5e632b958ca84 /deps/npm/node_modules/npm-registry-client/lib/request.js | |
parent | 33aa953f918f624a44e538baf2a3ee41570ac303 (diff) | |
download | android-node-v8-d44a9eb11b34900b44a9d135a2c965346fff702e.tar.gz android-node-v8-d44a9eb11b34900b44a9d135a2c965346fff702e.tar.bz2 android-node-v8-d44a9eb11b34900b44a9d135a2c965346fff702e.zip |
deps: upgrade npm to 3.10.8
PR-URL: https://github.com/nodejs/node/pull/8706
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/node_modules/npm-registry-client/lib/request.js')
-rw-r--r-- | deps/npm/node_modules/npm-registry-client/lib/request.js | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js index 567fc8dbe4..04be044d6a 100644 --- a/deps/npm/node_modules/npm-registry-client/lib/request.js +++ b/deps/npm/node_modules/npm-registry-client/lib/request.js @@ -92,7 +92,16 @@ function regRequest (uri, params, cb_) { } function makeRequest (uri, params, cb_) { - var cb = once(cb_) + var socket + var cb = once(function (er, parsed, raw, response) { + if (socket) { + // The socket might be returned to a pool for re-use, so don’t keep + // the 'error' listener from here attached. + socket.removeListener('error', cb) + } + + return cb_(er, parsed, raw, response) + }) var parsed = url.parse(uri) var headers = {} @@ -146,13 +155,42 @@ function makeRequest (uri, params, cb_) { this.log.http('request', params.method, parsed.href || '/') var done = requestDone.call(this, params.method, uri, cb) - var req = request(opts, decodeResponseBody(done)) + var req = request(opts, params.streaming ? undefined : decodeResponseBody(done)) req.on('error', cb) + + // This should not be necessary, as the HTTP implementation in Node + // passes errors occurring on the socket to the request itself. Being overly + // cautious comes at a low cost, though. req.on('socket', function (s) { - s.on('error', cb) + socket = s + socket.on('error', cb) }) + if (params.streaming) { + req.on('response', function (response) { + if (response.statusCode >= 400) { + var parts = [] + response.on('data', function (data) { + parts.push(data) + }) + response.on('end', function () { + decodeResponseBody(done)(null, response, Buffer.concat(parts)) + }) + } else { + response.on('end', function () { + // don't ever re-use connections that had server errors. + // those sockets connect to the Bad Place! + if (response.socket && response.statusCode > 500) { + response.socket.destroy() + } + }) + + return cb(null, response) + } + }) + } + if (params.body && (params.body instanceof Stream)) { params.body.pipe(req) } |