diff --git a/index.js b/index.js index b2b6bdd..f3d2d30 100644 --- a/index.js +++ b/index.js @@ -29,7 +29,7 @@ function forwarded (req) { // simple header parsing var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') var socketAddr = getSocketAddr(req) - var addrs = [socketAddr].concat(proxyAddrs) + var addrs = (socketAddr ? [socketAddr] : []).concat(proxyAddrs) // return all addresses return addrs @@ -44,9 +44,8 @@ function forwarded (req) { */ function getSocketAddr (req) { - return req.socket - ? req.socket.remoteAddress - : req.connection.remoteAddress + var socket = req.socket || req.connection + return socket ? socket.remoteAddress : undefined } /** diff --git a/test/test.js b/test/test.js index 08e4964..47bf6d4 100644 --- a/test/test.js +++ b/test/test.js @@ -58,6 +58,18 @@ describe('forwarded(req)', function () { var req = createReq('connection', '10.0.0.1') assert.strictEqual(forwarded(req)[0], '10.0.0.1') }) + + it('should omit socket address when socket is disconnected', function () { + var req = { headers: {}, socket: { remoteAddress: undefined } } + var addrs = forwarded(req) + assert.strictEqual(addrs.indexOf(undefined), -1) + }) + + it('should omit socket address when both socket and connection are absent', function () { + var req = { headers: {} } + var addrs = forwarded(req) + assert.strictEqual(addrs.indexOf(undefined), -1) + }) }) })