I am trying following code at node js using mysql but getting error \"Cannot enqueue Query after invoking quit.
var mysql = require(\'mysql\');
var connection
The problem is connection.end()
triggered before your query is not finished yet. Try to put connection.end()
to end of outer loop.
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
for (var i in rows) {
console.log('Product Name: ', rows[i].product_name);
var emp_query = 'SELECT * FROM tbl_employer';
connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
if (emp_err) throw emp_err;
for (var e in emp_rows) {
console.log('Employer Name: ', emp_rows[e].company_name);
}
});
}
connection.end();
});
Hope it will be useful for you.
I see two problems in your code:
connection.end()
synchronously, but your queries run in a asynchronous flow. You have to call connection.end()
only when you've finished the second query.for
loop to run assynchronous calls (you outter loop).To accomplish what you're trying to do, you have to consider those assynchronous scenarios. You could use promises or a module like async, that provides you a lot of methods to deal with assyncronous flows, like async.each():
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
async.each(rows, function (row, callback) {
console.log('Product Name: ', row.product_name);
var emp_query = 'SELECT * FROM tbl_employer';
connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
if (emp_err) callback(emp_err);
for (var e in emp_rows) {
console.log('Employer Name: ', emp_rows[e].company_name);
}
callback();
});
});
}, function (err) {
connection.end();
}
});
Now it will guarantee that connection.end()
will just be called when all your queries have finished.
Remove connection end function
==> connection.end();