0

So I have done C++ Java and PHP and wanted to give a crack at Node.js. Below I have a very simple and unsecured SQL query.

module.exports = {
  LoginCheck: function(data,cb){
    console.log(data.password);
    console.log(data.username);
    if(data.username && data.password){
        console.log('we have arrived');
        var config = require(__dirname+'/../Config/config.json');
        var mysql = require('mysql');
        var con = mysql.createConnection({
            host: config.LoginDBhost,
            port: config.LoginDBport,
            user: config.LoginDBusername,
            password: config.LoginDBpassword,
            database: config.LoginDB
            });
        con.connect(function(err) {
          if (err) throw err;
            console.log('we have connected');
          con.query("SELECT * FROM `Users` WHERE `Username` = '"+data.username+"'", function (err, result) {
            if (err) console.log(err); 
            if(result.Password){    
                if(result[0].Password){         
                    if(result[0].Password == data.password){
                        console.log('true');
                        cb(true);
                    }       
                }
            }

          });
        });
    }   
    //either password is null or didnt match on file... if we are this far its a fail
    console.log('false');
    cb(false);
  },
  bar: function () {
    // whateverss
  }
};

The code does not wait for the sql connection and skips to being false. I been banging my head on a desk for days trying to figure out how promises and callbacks works after years of having my code follow steps layed.

Could someone convert this and explain how to force my code to be synchronous when I need it to be?

MoonEater916
  • 436
  • 2
  • 6
  • 19

1 Answers1

1

Try this code :

module.exports = {
  LoginCheck: function(data,cb){
    console.log(data.password);
    console.log(data.username);
    if(data.username && data.password){
        console.log('we have arrived');
        var config = require(__dirname+'/../Config/config.json');
        var mysql = require('mysql');
        var con = mysql.createConnection({
            host: config.LoginDBhost,
            port: config.LoginDBport,
            user: config.LoginDBusername,
            password: config.LoginDBpassword,
            database: config.LoginDB
            });
        con.connect(function(err) {
          // I think cb(false) here but you use throw err.
          if (err) throw err;
          console.log('we have connected');
          con.query("SELECT * FROM `Users` WHERE `Username` = '"+data.username+"'", function (err, result) {
            if (err) console.log(err);
            if(result.Password){
                if(result[0].Password){            
                    if(result[0].Password == data.password){
                        console.log('true');
                        cb(true);
                    }
                }
            }

            //either password is null or didn't match on file... if we are this far its a fail
            console.log('false');
            cb(false);

          });
        });
    }
  },
  bar: function () {
    // whateverss
  }
};
hong4rc
  • 3,999
  • 4
  • 21
  • 40