From 3f914bb4af00b0c67d8ab35ef5d0a6b53e541cfc Mon Sep 17 00:00:00 2001 From: froatsnook Date: Thu, 2 Apr 2015 10:41:43 +0200 Subject: [PATCH] Delete request headers with undefined value. --- request.js | 8 ++++++++ tests/test-defaults.js | 18 ++++++++++++++++++ tests/test-headers.js | 24 ++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/request.js b/request.js index 8e79001d0..5f8f26844 100644 --- a/request.js +++ b/request.js @@ -323,6 +323,14 @@ Request.prototype.init = function (options) { } self.headers = self.headers ? copy(self.headers) : {} + // Delete headers with value undefined since they break + // ClientRequest.OutgoingMessage.setHeader in node 0.12 + for (var headerName in self.headers) { + if (typeof self.headers[headerName] === 'undefined') { + delete self.headers[headerName] + } + } + caseless.httpify(self, self.headers) if (!self.method) { diff --git a/tests/test-defaults.js b/tests/test-defaults.js index e4afa6d21..847044d19 100644 --- a/tests/test-defaults.js +++ b/tests/test-defaults.js @@ -23,6 +23,14 @@ tape('setup', function(t) { resp.end() }) + s.on('/foo-no-test', function(req, resp) { + assert.equal(req.headers.foo, 'bar') + assert.equal('test' in req.headers, false) + assert.equal(req.method, 'GET') + resp.writeHead(200, {'Content-Type': 'text/plain'}) + resp.end('TESTING!') + }) + s.on('/post', function (req, resp) { assert.equal(req.headers.foo, 'bar') assert.equal(req.headers['content-type'], null) @@ -136,6 +144,16 @@ tape('merge headers', function(t) { }) }) +tape('default undefined header', function(t) { + request.defaults({ + headers: { foo: 'bar', test: undefined } + })(s.url + '/foo-no-test', function(e, r, b) { + t.equal(e, null) + t.equal(b, 'TESTING!') + t.end() + }) +}) + tape('post(string, object, function)', function(t) { request.defaults({ headers: { foo: 'bar' } diff --git a/tests/test-headers.js b/tests/test-headers.js index 0b8777124..6ec9dba04 100644 --- a/tests/test-headers.js +++ b/tests/test-headers.js @@ -18,6 +18,14 @@ s.on('/redirect/to', function(req, res) { res.end('ok') }) +s.on('/headers.json', function(req, res) { + res.writeHead(200, { + 'Content-Type': 'application/json' + }) + + res.end(JSON.stringify(req.headers)) +}) + tape('setup', function(t) { s.listen(s.port, function() { t.end() @@ -138,6 +146,22 @@ tape('upper-case Host header and redirect', function(t) { }) }) +tape('undefined headers', function(t) { + request({ + url: s.url + '/headers.json', + headers: { + 'X-TEST-1': 'test1', + 'X-TEST-2': undefined + }, + json: true + }, function(err, res, body) { + t.equal(err, null) + t.equal(body['x-test-1'], 'test1') + t.equal(typeof body['x-test-2'], 'undefined') + t.end() + }) +}) + tape('cleanup', function(t) { s.close(function() { t.end()