Nodejs:mysql:只能查询最多两次

我为我的nodejs项目使用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表:分别为用户,configuration文件,活动。 我的问题是:我总是跑到两个查询,最后一个查询看起来像从不碰。 我打印错误,但什么都没显示。

例如:如果我插入(User, Profile, Activity) 。 只是Activity表不能插入。 如果我插入(User, Activity, Profile) 。 Just 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; 

请搞清楚我的问题。

谢谢 :)

你应该把你的callback函数放在waterfallarrays之外。 喜欢这个:

 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;