Skip to content

Commit

Permalink
call callback once on listen error
Browse files Browse the repository at this point in the history
  • Loading branch information
wesleytodd committed Feb 21, 2017
1 parent c8d9223 commit cf5ce72
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 5 deletions.
14 changes: 10 additions & 4 deletions lib/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ var compileTrust = require('./utils').compileTrust;
var flatten = require('array-flatten');
var merge = require('utils-merge');
var resolve = require('path').resolve;
var once = require('once')
var Router = require('router');
var slice = Array.prototype.slice;

Expand Down Expand Up @@ -598,10 +599,15 @@ app.render = function render(name, options, callback) {
* @public
*/

app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
app.listen = function listen () {
var server = http.createServer(this)
var args = Array.prototype.slice.call(arguments)
if (typeof args[args.length - 1] === 'function') {
var done = args[args.length - 1] = once(args[args.length - 1])
server.once('error', done)
}
return server.listen.apply(server, args)
}

/**
* Log error using console.error.
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"once": "1.4.0",
"parseurl": "~1.3.1",
"path-is-absolute": "1.0.1",
"path-to-regexp": "0.1.7",
Expand Down
16 changes: 15 additions & 1 deletion test/app.listen.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

var express = require('../')
, request = require('supertest');
var assert = require('assert')
var request = require('supertest')

describe('app.listen()', function(){
it('should wrap with an HTTP server', function(done){
Expand All @@ -15,4 +16,17 @@ describe('app.listen()', function(){
done();
});
})
it('should callback on HTTP server errors', function (done) {
var app1 = express()
var app2 = express()

var server1 = app1.listen(0, function (err) {
assert(!err)
var server2 = app2.listen(server1.address().port, function (err) {
assert(err.code === 'EADDRINUSE')
server1.close()
done()
})
})
})
})

0 comments on commit cf5ce72

Please sign in to comment.