Search code examples
mysqlnode.jsasync-awaitnode-mysql2

How to make a function to query MySQL in NodeJS?


I made this:

const mysql = require('mysql2/promise')

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0
})

async function query(query) {

    const result = await pool.query(query)
    return result[0]

}

console.log(query('SELECT * FROM `users`'))

and I got back

Promise { <pending> }

How do I get back my results from querying the database, just like PHP can do?
In PHP I never had to do such a thing like async/await and promises...

I also tried using mysql:

const mysql = require('mysql')

const db = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'nodejs'
})

function query(query) {
    db.query(query, (err, result) => {
        if (err) throw err
        return result
    })
}

console.log(query('SELECT * FROM `users`'))

but I got an undefined result


Solution

  • try this:

    var mysql = require('mysql');
    
    var con = mysql.createConnection({
        host: "localhost",
        user: "yourusername",
        password: "yourpassword",
        database: "mydb"
    });
    
    // function definition
    function runQuery (con, sqlQuery) {
    
        return new Promise((resolve, reject) => {
            console.log("START");
            if(con){
                con.connect(function (err) {
                    if (err) throw err;
                });
    
                if (sqlQuery) {
                    con.query(sqlQuery, function (error, result, fields) {
                        connection.end(); // end connection
                        if (error) {
                            throw error;
                        } else {
                            return resolve(result);
                        }
                    });
                } else {
                    connection.end(); // end connection
                    // code:  handle the case 
                }
            } else {
                // code: handle the case
            }
    
        });
    
    }
    
    var sqlQuery = 'SELECT * FROM tableName';
    
    // function call and pass the connection and sql query you want to execute
    var p  = runQuery(con, sqlQuery); 
    p.then((data)=>{ // promise and callback function
        console.log('data :', data); // result
        console.log("END");
    
    });