Problem:
constserver=app.listen();console.log(`Server listening on: ${server.address().port}`)can fail, as the server is created asynchronously and using the callback is not always practical/flexible
Proposal
either server.listenPromise(port), or even better, have server.listen(port) return a Promise if no callback is provided
Example
// .... conststart=async()=>{awaitconfig.load();awaitDB.connect(dbOptions);router(app);app.use((err,req,res,next)=>{// error handler// ...});constserver=http.createServer(app);// proposal:returnserver.listen(process.env.PORT||3000);// if .listen would be a promise resolving to server// or await server.listen(...); return server; else// currently I have to do:// return new Promise((res, rej) => server.listen(process.env.PORT || 3000, err => err ? rej(err) : res()));// or using express's app.listen, which wraps createServer and listen:// return new Promise((res, rej) => app.listen(process.env.PORT || 3000, function (err) {// if (err) return rej(err);// res(this) // this is node's http Server// }));// using util.promisify doesn't look much better:// return promisify(server.listen).bind(server)(process.env.PORT || 3000);// or// return promisify(cb => server.listen(process.env.PORT || 3000, cb))();};then using it somewhere else:
start().then(server=>console.log(`Server listening on: ${server.address().port}`)).catch(err=>{// ...});Edit: I'll try to submit this request to express, and have a similar promise method near https://github.com/expressjs/express/blob/master/lib/application.js#L616-L619
Edit2: the discussion in expressjs/express#3675 has interesting details
Problem:
can fail, as the server is created asynchronously and using the callback is not always practical/flexible
Proposal
either
server.listenPromise(port), or even better, haveserver.listen(port)return a Promise if no callback is providedExample
then using it somewhere else:
Edit: I'll try to submit this request to express, and have a similar promise method near https://github.com/expressjs/express/blob/master/lib/application.js#L616-L619
Edit2: the discussion in expressjs/express#3675 has interesting details