Executing mysql query suspends process and code after won't be executed

Viewed 20

I'm asking help as I'm trying to get 2 different sets of data from a mysql db. I've written 2 separate functions using promisify. Unfortunately when I execute this node file only the first function gets executed and shown in the console. After some debugging I think it's await query(...) the cause of this problem. After this query (the one inside getSources() ) is executed, the process is suspended and I've got to terminate it. I also tried using mysql2 and moving con.end() to a different line unsuccesfully. Of course any help we'll be appreciated.

import mysql from 'mysql';
import { promisify } from 'util';
import express from 'express';
import path from 'path';

const sql = "SELECT `id` FROM `probes` WHERE `country`= ?";
const sql1 = "SELECT `fqdn` FROM `anchors` WHERE `country`= ?";
let sources = [];    //sources
let targets = [];   //targets

const app = express();
const __dirname = path.resolve();
app.use(express.urlencoded( {extended: true} ));
app.use(express.static(__dirname));

const con = mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'',
    database:'probes&anchors'
});

const query = promisify(con.query).bind(con);

const getSources = async (from) => {

    console.log("I'm in getSources");

    con.connect((err)=>{
        if(err){
            console.log("Connection not proper");
        }else{
            console.log("connected");
        }
    });
    
    await query(sql, [from], (err, rows) => {
        console.log("error in query: "+ err);
        if (err) throw err;

        rows.forEach((v) => {
            sources.push(v.id);
        });
        console.log(sources);
        con.end(err => {
            if(err) console.log(`${err.toString()}`)
            console.log('con ended')
        });
    }); 
};

const getTargets = async (to) => {

    console.log("I'm in getTargets");

    con.connect((err)=>{
        if(err){
            console.log("Connection not proper");
        }else{
            console.log("connected");
        }
    });
    
    await query(sql1, [to], (err, rows) => {
        console.log(err);
        if (err) throw err;

        rows.forEach((v) => {
            targets.push(v.fqdn); 
        });
        con.end(err => {
            if(err) console.log(`${err.toString()}`)
            console.log('con ended')
        });
    });
};

app.post('/', async function(req,res){

    await getSources(req.body.from_country);
    await getTargets(req.body.to_country);
    console.log(sources);
    console.log(targets);
    
    res.send("Loaded");
});

app.get('/', (req, res) => res.send('Hello World! From Node.js'));
app.listen(8000, () => console.log('Example app listening on port 8000!'));

0 Answers
Related