node.js - How to resolve multiple queries together using Sequelizejs -
i have basic nodejs script:
var express = require('express'), sequelize = require('sequelize'), promise = require('bluebird'), app = express(), optimus = new sequelize('optimus', 'root', 'test', {host: '127.0.0.1', dialect: 'mysql'}), query = 'select id borrowers limit 0,10', query2 = 'select count(*) borrowers'; app.get('/', function(req,res) { var chain = new sequelize.utils.querychainer(); console.log('begin'); chain.add(optimus, 'query', [query,null,null,[]]) .add(optimus, 'query', [query2,null,null,[]]) .run() .success(function() { console.log('done'); }).error(function(err) { console.log('oh no'); }); console.log('end'); res.send('hi ma!'); }); var server = app.listen(3000, function() { console.log('listening on port %d', server.address().port); } );
neither 'done' nor 'oh no' ever fires leads me believe can' chain raw queries in manner.
what i'd accomplish asynchronously resolve both queries , pass results via res.send().
i have admit being complete n00b @ nodejs insights how correctly structure appreciated.
the major issue code fact, sending response client/browser early. instead of res.send
-ing @ end of app.get
method, need send answer inside success respectively inside error callback. here are:
var express = require('express'), sequelize = require('sequelize'), promise = require('bluebird'), app = express(), optimus = new sequelize('sequelize_test', 'root', null, {host: '127.0.0.1', dialect: 'mysql'}), query = 'select id borrowers limit 0,10', query2 = 'select count(*) count borrowers'; app.get('/', function(req,res) { var chain = new sequelize.utils.querychainer(); console.log('begin'); chain .add(optimus.query(query, null, { raw: true })) .add(optimus.query(query2, null, { raw: true, plain: true })) .run() .success(function(results) { res.send({ resultofquery1: results[0], resultofquery2: results[1] }); }).error(function(err) { console.log('oh no', err); }); }); var server = app.listen(3000, function() { console.log('listening on port %d', server.address().port); } );
please notice, changed credentials local ones. furthermore check arguments of chain.add
. instead of passing values upcoming serial executation, throw actual asynchronous methods , let querychainer handle promises.
Comments
Post a Comment