mysql接続をどこで終了しますか?ノードMysqlはquitを呼び出した後でクエリをエンキューできません
クエリを順番に実行する必要があります。私は、現時点では、このようなコード書いています:
var sqlFindMobile = "select * from user_mobiles where mobile=?";
var sqlNewUser = "insert into users (password) values (?)";
//var sqlUserId = "select last_insert_id() as user_id";
var sqlNewMobile = "insert into user_mobiles (user_id, mobile) values (?,?)";
connection.connect(function(err){});
var query = connection.query(sqlFindMobile, [req.body.mobile], function(err, results) {
if(err) throw err;
console.log("mobile query");
if(results.length==0) {
var query = connection.query(sqlNewUser, [req.body.password], function(err, results) {
if(err) throw err;
console.log("added user");
var user_id = results.insertId;
var query = connection.query(sqlNewMobile, [user_id, req.body.mobile], function(err, results) {
if(err) throw err;
console.log("added mobile");
//connection.end();
});
});
}
});
//connection.end();
を(私はノード、NPM-ExpressとNPM-mysqlので初心者です、私は関連の質問を見つけるために、「MySQLがエンキューすることはできません表現」のためにSOを検索しようとしています。あなたはfelixgeによりノード-mysqlのモジュールを使用している場合は、connection.queryのすべてを行った後、それらを発見していない。)
"added mobile"ログの後にコメントアウトされているconnection.end()を呼び出しています。私が感知している問題は、フローが、すなわちスロー(err)ポイントのいずれかに存在する場合、接続が閉じられないということです。私は虚偽の接続ミスとそのスケーラビリティへの影響をオープンなままにしている接続を痛感しています。私はちょうど私の人生のこの時点でそれをしたくないです。あなたがこれに従うことができるパターンを持っているなら、それは素晴らしいでしょう。非同期は良い呼び出しのようです。私はそれをチェックし、それに応答するために1日かかるだろう。ありがとう。 –
すぐに話すと、これらのクエリはネストされていて、シリーズで実行する必要があるものではないため、asyncは私のためには機能しません。状態を維持し、前提条件をチェックすることは、あまりにも多くのオーバーヘッドです。 –
waterfall関数を使用してクエリを実行できます。私は基本的な構造をここに書きました:http://pastebin.com/RDaiqZsp – matthewtole