aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-registry-client/lib/request.js
diff options
context:
space:
mode:
authorKat Marchán <kzm@sykosomatic.org>2016-09-22 07:59:37 -0700
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2016-09-27 16:39:27 -0400
commitd44a9eb11b34900b44a9d135a2c965346fff702e (patch)
treea8d074826fb51641f5a7f24978e5e632b958ca84 /deps/npm/node_modules/npm-registry-client/lib/request.js
parent33aa953f918f624a44e538baf2a3ee41570ac303 (diff)
downloadandroid-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.js44
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)
}