2015-07-20 27 views
1

我爲我的nodejs項目使用mysqlNodejs:mysql:最多隻能查詢兩次

這裏是我的SQL代碼:

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; 

這裏是我的數據庫查詢代碼。我分別插入數據庫3表:用戶,配置文件,活動。我的問題是:我總是跑到兩個查詢,而最後一個查詢看起來像從不碰。我打印錯誤,但什麼都沒顯示。如果我插入(User, Profile, Activity)。只是Activity表不能插入。如果我插入(User, Activity, Profile)。只是Profile表不能插入。這意味着我的每個表格的插入代碼都是正確的。

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 for later reference 
    var userId; 
    var dateCreated = new Date(); 
    var dateUpdated = dateCreated; 

    async.waterfall([ 
     // get 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 INTO 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 INTO 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 INTO 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; 

請解決我的問題。

謝謝:)

+0

您最後一次回調應該在任務數組之外:'async.waterfall([fn1,fn2,fn3],function(error,userData){})' – hassansin

回答

1

你應該把你的callback功能waterfall陣列之外。像這樣:

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 for later reference 
var userId; 
var dateCreated = new Date(); 
var dateUpdated = dateCreated; 

async.waterfall([ 
    // get 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 INTO 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 INTO 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 INTO 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;