0

api.js:

var db = require('./db.js');

console.log(searchAccessToken(name,queryDB));

searchAccessToken function:

function searchAccessToken(emailAddress,callback){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    return callback(sql);
}

queryDB function:

function queryDB(sql){
    var token = "";
    db(function(err,conn){
        conn.query(sql,function(err,results){
            if(err){
                conn.release();
                return err;
            }else if(results.length){
                token = results[0].accessToken;
            }
            conn.release();
            return token;
        });
    });
}

db.js

var mysql = require('mysql');

var pool = mysql.createPool({
  //development
  // host:'localhost',
  // user:'root',
  // password: '',
  // database: 'merchantdev',
  // insecureAuth : true

  //staging
  host:'',
  user: '',
  password: '',
  database: ''
});

var getConnection = function(callback) {
  pool.getConnection(function(err, connection) {
      if(err) {
        return callback(err);
      }
      callback(null, connection);
  });
};

module.exports = getConnection;

I have read the other thread in SOF (How do I return the response from an asynchronous call?) but still unable to find out the mistake in my code. Please do not close this question as I have struggled for hours to find the solution but still couldn't. Console.log returns undefined when it is supposed to return a value.

jdotdoe
  • 477
  • 2
  • 6
  • 18

2 Answers2

1

Your callback function flow is not correct, you are calling asynchronous function that is conn.query

var db = require('./db.js');

// this function not required callback function 
// as we are not doing anything asynchronous
function searchAccessToken(emailAddress){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    return sql;
}
// this function required callback function 
// as we are calling 2 asynchronous function
function queryDB(sql, callback){
    var token = "";
    db(function(err,conn){
        conn.query(sql,function(err,results){
            if(err){
                conn.release();
                return callback(err);
            }else if(results.length){
                token = results[0].accessToken;
            }
            conn.release();
            return callback(null, token);
        });
    });
}

queryDB(searchAccessToken(name), function callback(err, token) {
   if(err) return console.log(err)
   console.log(token);
})
Arif Khan
  • 5,039
  • 2
  • 16
  • 27
0

Checkout this snippet with callback error handling.

var db = require('./db.js');

function queryDB(sql, callback){
    var token = "";
    db(function(err,conn){
        conn.query(sql,function(err,results){
            if(err){
                conn.release();
                callback(err);
            }else if(results && results.length > 0){
                token = results[0].accessToken;
            }
            conn.release();
            callback(null, token); //Returning Token as callback response
        });
    });
}

function searchAccessToken(emailAddress,callback){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    queryDB(sql, (err, token) => {
        if(err) {
            callback(err);
        } else {
            callback(null, token);
        }
    })
}

searchAccessToken("xyz@gmail.com", (err, token) => {
    if(err) {
        console.log("Err :", err);
    } else {
        console.log("Token :", token);
    }
});
Ashok JayaPrakash
  • 2,115
  • 1
  • 16
  • 22