node.js - Nodejs: mysql: just can query maximum two times -


i'm using mysql nodejs project.

here sql code:

var mysql = require('mysql');  var config = {     host: 'localhost',     username: 'root',     password: 'root',     port: 8889,     database: "bookdb",     connectionlimit: 100,     charset: 'utf8_general_ci',     dialect: "mysql" };   var pool = mysql.createpool({    connectionlimit: config.connectionlimit,     host     : config.host,     user     : config.username,     password : config.password,     database : config.database,     port     : config.port,     charset  : config.charset,     dialect  : config.dialect });  module.exports.pool = pool; 

here database query code. insert database 3 tables: user, profile, activity, respectively. problem is: run 2 queries, , last query never touch. print error show nothing.

for example: if insert (user, profile, activity). activity table cannot insert. if insert (user, activity, profile). profile table cannot insert. means insert code each table correct.

var async = require('async'); var pool = require('../config/mysql').pool;  var createuser = function createuser (username, password, email, firstname, lastname, avatarurl, // user table                                       quote, about, homepage,                                    // profile table                                       lastloginip,                                               // activity table                                       callback) {     // database connection     var dbc;     // user id later reference     var userid;     var datecreated = new date();     var dateupdated = datecreated;      async.waterfall([        // connection         function (callback) {             pool.getconnection(callback);         },          // insert user table         function (connection, callback) {             dbc = connection;             var params = {                 username: username,                 password: password,                 emailaddress: email,                 firstname: firstname,                 lastname: lastname,                 avatarurl: avatarurl,                 datecreated: datecreated,                 dateupdated: dateupdated             };             var query = "insert user set ?";             dbc.query(query, params, callback);         },          // insert activity table         function(result, callback) {             userid = result.insertid;             console.log('second user id: ' + userid);             var params = {                 activityid: userid,                 profileview: 0,                 lastloginip: lastloginip             };             var query = "insert activity set ?";             dbc.query(query, params, callback);         },          // insert profile table         function (result, callback) {            // userid = result.insertid;             console.log('inserted userid: '+ userid);             var params = {                 profileid: userid,                 quote: quote,                 about: about,                 homepage: homepage,                 datecreated: datecreated,                 dateupdated: dateupdated             };             var query = "insert profile set ?";             dbc.query(query, params, callback);         },            function (error, userdata) {             console.log('end block');             if (dbc) dbc.release();             if (error) {                 console.log('error');                 report_error(error);             } else {                 callback(null, userdata);             }         }     ]);  };  module.exports.createuser = createuser; 

please figure out problem.

thanks :)

you should put callback function outside waterfall array. this:

var async = require('async'); var pool = require('../config/mysql').pool;  var createuser = function createuser (username, password, email, firstname, lastname, avatarurl, // user table                                   quote, about, homepage,                                        // profile table                                   lastloginip,                                               // activity table                                   callback) { // database connection var dbc; // user id later reference var userid; var datecreated = new date(); var dateupdated = datecreated;  async.waterfall([    // connection     function (callback) {         pool.getconnection(callback);     },      // insert user table     function (connection, callback) {         dbc = connection;         var params = {             username: username,             password: password,             emailaddress: email,             firstname: firstname,             lastname: lastname,             avatarurl: avatarurl,             datecreated: datecreated,             dateupdated: dateupdated         };         var query = "insert user set ?";         dbc.query(query, params, callback);     },      // insert activity table     function(result, callback) {         userid = result.insertid;         console.log('second user id: ' + userid);         var params = {             activityid: userid,             profileview: 0,             lastloginip: lastloginip         };         var query = "insert activity set ?";         dbc.query(query, params, callback);     },      // insert profile table     function (result, callback) {        // userid = result.insertid;         console.log('inserted userid: '+ userid);         var params = {             profileid: userid,             quote: quote,             about: about,             homepage: homepage,             datecreated: datecreated,             dateupdated: dateupdated         };         var query = "insert profile set ?";         dbc.query(query, params, callback);     } ],     function (error, userdata) {         console.log('end block');         if (dbc) dbc.release();         if (error) {             console.log('error');             report_error(error);         } else {             callback(null, userdata);         }     } )};  module.exports.createuser = createuser; 

Comments