Search code examples
node.jssql-serverdatabasetiming

How to wait for msSQLdb response on nodejs


I'm making an aplication that a I need to "res.send()" the SQLdb response. The problem is that my db is sending the response too late.
Here is my current solution:

var sqlres;
function sqldb(SQLquery){

    sql.connect(config, function (err) {

        if (err) console.log(err);
        var request = new sql.Request();

        request.query(SQLquery, function (err, recordset) {
            if (err) console.log(err)
            sqlres = recordset.recordset;
        });
    });
}

app.get('/db', function (req, res) {
    sqldb('SELECT * from dbo.pontos');

    const timeoutObj = setTimeout(() => {
        res.send(sqlres);
    }, 1500);


});

If I remove "setTimeout" here is what i get on the first load: image
And here is the second run/result of the code above: result


Solution

  • you are using callbacks in this instance, so you need to pass a callback to your sqldb() function. so

    var sqlres;
    function sqldb(SQLquery, cb){
    
        sql.connect(config, function (err) {
    
            if (err) console.log(err);
            var request = new sql.Request();
    
            request.query(SQLquery, function (err, recordset) {
                if (err) console.log(err)
                sqlres = recordset.recordset;
                cb(sqlres)
            });
        });
    }
    
    app.get('/db', function (req, res) {
        sqldb('SELECT * from dbo.pontos', (sqlres) => {
            res.send(sqlres);
        });
    });