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();