Query del database sincrono con Node.js

Ho un’app Node.js / Express che interroga un db MySQL all’interno della rotta e visualizza il risultato all’utente. Il mio problema è come faccio a eseguire le query e bloccare fino a quando entrambe le query sono fatte prima di redirect l’utente alla pagina che hanno richiesto?

Nel mio esempio ho 2 query che devono finire prima di renderizzare la pagina. Posso ottenere le query per l’esecuzione in modo sincrono se annullo la query 2 all’interno del callback “risultato” della query 1. Ciò tuttavia diventerà molto complesso quando il numero di query aumenterà.

Come faccio a eseguire più query di database (in questo caso 2) in modo sincrono senza annidare la query successiva nel callback “risultato” della query precedente?

Ho esaminato i “Controlli di stream / Async” nei moduli Node e ho provato il stream-j, ma non riesco a farlo funzionare con le query asincrone.

Di seguito sono elencate le 2 query che sto tentando di eseguire dalla route ‘/ home’. Gli esperti del Nodo possono spiegare il modo “giusto” per farlo.

app.get('/home', function (req,res) { var user_array = []; var title_array = []; // first query var sql = 'select user_name from users'; db.execute(sql) .addListener('row', function(r) { user_array.push( { user_name: r.user_name } ); }) .addListener('result', function(r) { req.session.user_array = user_array; }); // second query var sql = 'select title from code_samples'; db.execute(sql) .addListener('row', function(r) { title_array.push( { title: r.title } ); }) .addListener('result', function(r) { req.session.title_array = title_array; }); // because the queries are async no data is returned to the user res.render('home.ejs', {layout: false, locals: { user_name: user_array, title: title_array }}); });