diff --git a/packages/web/src/server/http.js b/packages/web/src/server/http.js index d3297e33..4866da9c 100644 --- a/packages/web/src/server/http.js +++ b/packages/web/src/server/http.js @@ -74,11 +74,17 @@ export const createHttpServer = async (flecks) => { if (host) { args.push(host); } - args.push(async (error) => { - if (error) { - reject(error); - return; + const onError = (error) => { + if ('EADDRINUSE' === error.code) { + error.message = ( + `HTTP server couldn't connect: '${[host, port].join(':')}' already in use!` + ); } + reject(error); + }; + httpServer.on('error', onError); + args.push(async () => { + httpServer.off('error', onError); await flecks.invokeSequentialAsync('@flecks/web/server.up', httpServer); const actualPort = 0 === port ? httpServer.address().port : port; debug( diff --git a/packages/web/src/server/index.js b/packages/web/src/server/index.js index 82a69ec7..74961442 100644 --- a/packages/web/src/server/index.js +++ b/packages/web/src/server/index.js @@ -8,6 +8,15 @@ const { export {configSource}; export const hooks = { + '@flecks/core.starting': (flecks) => { + const { + host = 'production' === NODE_ENV ? '0.0.0.0' : 'localhost', + port, + public: httpPublic, + } = flecks.get('@flecks/web'); + flecks.web.host = host; + flecks.web.public = httpPublic || [host, port].join(':'); + }, '@flecks/web.routes': (flecks) => { const routes = [ { @@ -60,15 +69,8 @@ export const mixin = (Flecks) => class FlecksWithWeb extends Flecks { constructor(runtime) { super(runtime); if (!this.web) { - const { - host = 'production' === NODE_ENV ? '0.0.0.0' : 'localhost', - port, - public: httpPublic, - } = runtime.config['@flecks/web']; this.web = { config: runtime['@flecks/web'], - host, - public: httpPublic || [host, port].join(':'), server: undefined, }; }