From 7f340412d7c207252d29004f5a6b2b7de934a36b Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Fri, 11 May 2018 13:15:28 -0600 Subject: [PATCH] better error messages as per https://git.coolaj86.com/coolaj86/greenlock-express.js/issues/9#issuecomment-103 --- lex.js | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/lex.js b/lex.js index c61bcf1..751e2dc 100644 --- a/lex.js +++ b/lex.js @@ -24,6 +24,21 @@ module.exports.create = function (opts) { var ports = port; var servers = []; + function explainError(e) { + console.error('Error:' + e.message); + if ('EACCES' === e.errno) { + console.error("You don't have prmission to access '" + e.address + ":" + e.port + "'."); + console.error("You probably need to use \"sudo\" or \"sudo setcap 'cap_net_bind_service=+ep' $(which node)\""); + return; + } + if ('EADDRINUSE' === e.errno) { + console.error("'" + e.address + ":" + e.port + "' is already being used by some other program."); + console.error("You probably need to stop that program or restart your computer."); + return; + } + console.error(e.code + ": '" + e.address + ":" + e.port + "'"); + } + if (!plainPorts) { plainPorts = 80; } @@ -37,20 +52,30 @@ module.exports.create = function (opts) { } plainPorts.forEach(function (p) { - promises.push(new PromiseA(function (resolve, reject) { + if (!(parseInt(p, 10) >= 0)) { console.warn("'" + p + "' doesn't seem to be a valid port number for http"); } + promises.push(new PromiseA(function (resolve) { require('http').createServer(le.middleware(require('redirect-https')())).listen(p, function () { - console.log("Handling ACME challenges and redirecting to https on plain port " + p); + console.log("Success! Bound to port '" + p + "' to handle ACME challenges and redirect to https"); resolve(); - }).on('error', reject); + }).on('error', function (e) { + console.log("Did not successfully create http server and bind to port '" + p + "':"); + explainError(e); + process.exit(0); + }); })); }); ports.forEach(function (p) { - promises.push(new PromiseA(function (resolve, reject) { + if (!(parseInt(p, 10) >= 0)) { console.warn("'" + p + "' doesn't seem to be a valid port number for https"); } + promises.push(new PromiseA(function (resolve) { var server = require('https').createServer(le.httpsOptions, le.middleware(le.app)).listen(p, function () { - console.log("Handling ACME challenges and serving https " + p); + console.log("Success! Serving https on port '" + p + "'"); resolve(); - }).on('error', reject); + }).on('error', function (e) { + console.log("Did not successfully create https server and bind to port '" + p + "':"); + explainError(e); + process.exit(0); + }); servers.push(server); })); });