const PAUSE_BETWEEN_CONNECTIONS = 2000; const CONNECTION_ATTEMPTS = 3 * 60 * 1000 / PAUSE_BETWEEN_CONNECTIONS; // roughly 3 minutes const Connection = require('tedious').Connection; const config = { userName: "sa", password: "S0meVeryHardPassword", server: "localhost", options: { database: "knex_test", } }; let didConnect = false; let tryCount = 0; function tryToConnect() { tryCount++; if (tryCount > CONNECTION_ATTEMPTS) { console.log("Giving up... it fails if it fails"); process.exit(1); } console.log("Connecting... to mssql"); const connection = new Connection(config); connection.on('end', () => { if (!didConnect) { console.log(`Couldnt connnect yet... try again in ${PAUSE_BETWEEN_CONNECTIONS}ms...`); setTimeout(tryToConnect, PAUSE_BETWEEN_CONNECTIONS); } }); connection.on('error', () => { // prevent leaking errors.. driver seems to sometimes emit error event, // sometimes connect event with error // and some times just closes connection without error / connect events // (debug event says that socket was ended and thats it...) }); connection.on('connect', (err) => { if (!err) { console.log("Connecting mssql server was a great success!"); didConnect = true; } else { console.log("Error was passed to connect event."); } connection.close(); }); } tryToConnect();