angz
angz

Reputation: 129

Mysql getConnection() doesn't return the callback function in nodejs

I am trying to get a connection from mysql connection pool in nodejs. But the getConnection method for the pool does not return the callback function. (so it doesn't show any error or return the connection). But my mysql workbench shows that a connection has been made. Still when I using the connection it doesn't return anything in the callback.

   var pool = mysql.createPool({
      connectionLimit: 10,
      host: "localhost",
      database: "database",
      user: "root",
      password: "password"
   });

   exports.query = function (query, params, callback) {
      pool.getConnection(function (err, connection) {
        if (err) {

            console.log(err);
            connection.release();
            callback(err.code, null);
        }
        console.log("connected");
        connection.query(query, params, function (err, results) {
            connection.release();
            if (!err) {
                callback(null, results);

            }
            else {

                callback(err.code, null);

            }

        });

        connection.on('error', function (err) {
            connection.release();
            callback(err.code, null);
        });

    });           

}

This is where I query using the database.

 exports.getLevels= function(callback){
    var query = 'SELECT * FROM levels';
    db.query(query,null, function (err, results) {
       if (err) {
          console.log(err);
       }
       console.log('reached');
       callback(err, results);
    });
 }

Upvotes: 1

Views: 2104

Answers (1)

M. Hamza Rajput
M. Hamza Rajput

Reputation: 10246

Try this one this might help

I'm using this npm package mysql using this command

npm i --save mysql

I think either you doý have a localhost user and remote user or you mysql instance is not running. Make sure you have create a local user which you access in nodejs script, you can take help from here and check connection from using this.

const MySQL_DB = require( "mysql" );
let DB_Pool = MySQL_DB.createPool( {
    connectionLimit: 15,
    multipleStatements: true,
    host: "localhost",
    user: "root",
    password: "abcdefgh",
    database: "working_db",
    port: "3306"
} );

function GetDatabaseResponse( query ) {

    return new Promise( ( resolve, reject ) => {
        DB_Pool.getConnection( ( ConnectionErrorMessage, DB_LocalConnection ) => {
            if ( ConnectionErrorMessage ) {
                console.log( "DataBase Connection Failed" );
                console.log( ConnectionErrorMessage );
                resolve( ConnectionErrorMessage );
                return;

            } else {

                DB_LocalConnection.query( query, ( ProcedureErrorMessage, ProcedureCallResult ) => {
                    DB_LocalConnection.release();
                    if ( ProcedureErrorMessage ) {
                        console.log( "DataBase Query Execution Failed" );
                        console.log( DB_ProcedureCall );
                        console.log( ProcedureErrorMessage );
                        resolve( ProcedureErrorMessage );
                        return;

                    } else {
                        resolve( ProcedureCallResult );
                        return;
                    }
                } );
            }
        } );
    } );
}

( async () => {
    let query = 'SELECT * FROM levels';
    let Result = await GetDatabaseResponse( query );
    console.log( Result );
} )();

Here are your code implementation its working fine on my side.

databaseFile.js

const mysql = require( "mysql" );
var pool = mysql.createPool({
    connectionLimit: 15,
    multipleStatements: true,
    host: "localhost",
    user: "root",
    password: "abcdefgh",
    database: "working_db",
    port: "3306"
 });

module.exports =( query, callback) => { 

    pool.getConnection((err, connection) => {
      if (err) {
          console.log(err);
          connection.release();
          callback(err.code, null);
      }
      console.log("connected");
      connection.query(query,  (err, results) => {
          connection.release();
          if (!err) {
              callback(null, results);
          }
          else {
              callback(err.code, null);
          }
      });

      connection.on('error',(err) => {
          connection.release();
          callback(err.code, null);

      });

  });
}

index.js

let GetBataBaseResponse = require("./databaseFile");

GetBataBaseResponse("Select * from tblagents",(error, result) => {
    console.log("error",error);
    console.log("result",result);
});

If you still have issue message me.

Upvotes: 1

Related Questions