Skip to content

Commit

Permalink
Inline server-destroy functionality to close
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeembrey committed Oct 6, 2017
1 parent 1a43990 commit 17ad888
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 20 deletions.
3 changes: 0 additions & 3 deletions package.json
Expand Up @@ -41,8 +41,5 @@
"request": "^2.51.0",
"standard": "^10.0.2",
"which": "^1.0.8"
},
"dependencies": {
"server-destroy": "^1.0.0"
}
}
38 changes: 22 additions & 16 deletions server-address.js
@@ -1,7 +1,6 @@
var http = require('http')
var https = require('https')
var resolve = require('url').resolve
var enableDestroy = require('server-destroy')

/**
* Export server address.
Expand All @@ -15,27 +14,34 @@ module.exports = serverAddress
* @return {Object}
*/
function serverAddress (app) {
// Support functions (Express, Connect, etc).
if (typeof app === 'function') {
app = http.createServer(app)
}

var server
var server = typeof app === 'function' ? http.createServer(app) : app
var protocol = app instanceof https.Server ? 'https' : 'http'
var isListening = false
var self = {}
var connections = {}

/**
* Listen to a random port number.
*/
function listen (cb) {
if (!app.address()) {
server = app.listen(0, cb)

enableDestroy(server)
if (!server.address()) {
server.listen(0, cb)
} else if (cb) {
process.nextTick(cb)
}

if (!isListening) {
isListening = true

server.on('connection', function (c) {
var key = c.remoteAddress + ':' + c.remotePort
connections[key] = c
c.on('close', function () {
delete connections[key]
})
})
}

return self
}

Expand All @@ -46,7 +52,7 @@ function serverAddress (app) {
* @return {String}
*/
function url (path) {
var addr = app.address()
var addr = server.address()

if (!addr) {
throw new Error('server is not listening, call the listen method first')
Expand All @@ -61,10 +67,10 @@ function serverAddress (app) {
* Close the server (if listening).
*/
function close (cb) {
if (server) {
server.destroy(cb)
} else if (cb) {
process.nextTick(cb)
server.close(cb)

for (var key in connections) {
connections[key].destroy()
}

return self
Expand Down
5 changes: 4 additions & 1 deletion test/server-address.js
Expand Up @@ -106,14 +106,17 @@ describe('server address', function () {
var server = serverAddress(app)

expect(app.address().port).to.equal(originalPort)

server.listen()

expect(app.address().port).to.equal(originalPort)

request(server.url('/foo'), function (err, res, body) {
expect(body).to.equal('GET /foo')

server.close()
expect(app.address().port).to.equal(originalPort)

expect(app.address()).to.equal(null)

return done(err)
})
Expand Down

0 comments on commit 17ad888

Please sign in to comment.