luso luso - 2 years ago 163
Javascript Question

Approach to multiple MySQL queries with Node.js

I'm a newbie both on event/callback style programming and NodeJS. I'm trying to implement a little http server which serves ddbb data using node-mysql module.

My problems comes from queries structuration. Since there are often queries that require results from previous queries to run, I am not able to run all them simultaneously (asynchronously) and I am forced to wait some results.

My first approach was to run all the non-dependant queries at the same time and then loop until all of them have set a flag up saying I'm done so I can continue with the dependant (synchronized) ones, but I don't know if this is the correct approach.

Something like this:

function x(){
var result_for_asynch_query_1 = null
var result_for_asynch_query_2 = null

// call non-dependant query 1
// call non-dependant query 2

// loop until vars are != null

// continue with queries that require data from the first ones

//for each browser request

This way I can save some time in the final result since I don't wait all responses in a serial way but just to the longest one.

Is there a common way to do this? Any design pattern I'm not following?

Answer Source

try to think other way (there is good introduction on async flow

var db = get_link_or_pool();

do_queries( callback ) {
    db.query(sql1, function(err, res1) {
        if (err) {
        // use res1 ...
        db.query(sql2, function(err, res2) {
             if (err) {
             callback(null, res2); // think 'return'

request_handler(req) {
    do_queries( function(err, result) {
            write_result(req, result);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download