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 May 17, 2024
1 parent 26801a0 commit ee40a88
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 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').flatten
var merge = require('utils-merge');
var resolve = require('path').resolve;
var once = require('once')
var Router = require('router');
var setPrototypeOf = require('setprototypeof')

Expand Down Expand Up @@ -605,10 +606,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 @@ -47,6 +47,7 @@
"methods": "~1.1.2",
"mime-types": "~2.1.34",
"on-finished": "2.4.1",
"once": "1.4.0",
"parseurl": "~1.3.3",
"path-is-absolute": "1.0.1",
"proxy-addr": "~2.0.7",
Expand Down
14 changes: 14 additions & 0 deletions test/app.listen.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict'

var express = require('../')
var assert = require('assert')

describe('app.listen()', function(){
it('should wrap with an HTTP server', function(done){
Expand All @@ -10,4 +11,17 @@ describe('app.listen()', function(){
server.close(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)
app2.listen(server1.address().port, function (err) {
assert(err.code === 'EADDRINUSE')
server1.close()
done()
})
})
})
})

0 comments on commit ee40a88

Please sign in to comment.