2017-06-12 8 views
0

私のアプリケーションでは、私は最初の1つのID(お互いに多くの関係)のお互いに関連する2つの異なるテーブルがあります。これは、最初にこのようになりますJSON形式によってフロントエンド側からデータを収集する必要があります。ノードJS mySQLトリプルクエリと情報の紛失

cancellation = { 
name: someting 
id: someting 
rule = 
[ 
{someting}, {something}, {something} 
] 
} 

つの表は、キャンセルやルールの1秒間であろう。これらの情報をこの順序に入れたい場合は、まず取り消し用のレコードを1つ挿入する必要があります。次に、データベース内のこのレコードのIDを調べ、その後にこのIDを外部キーとして使用するすべてのルールを挿入するクエリを作成します。しかし、ノードJSは非同期であるため、残りのコードを実行し、この変数を未定義とみなすために、レコードプログラムのスターのIDに関する情報を取得します。

app.post('/databaseSend/cancellation', function(req,res){ 
var cancellationReceived = req.body; 
var cancellationID; 
var rules = []; 
var cancellation = []; 
cancellation[0] = 
[ 
    cancellationReceived.name, 
    cancellationReceived.id 
] 
// inserting data into cancellation table 
connection.query("INSERT INTO cancellations (name, User_ID) VALUES ?", [cancellation], 
    function(err,results){ 
     if(err){console.log(err)} 

    } 
) 
//fetching ID of the current record 
connection.query("SELECT id FROM cancellations WHERE User_ID = ? AND name = ?", [cancellationReceived.id, cancellationReceived.name], 
    function(err, results){ 
     var cancellationID = results[0].id; 
    }); 


//assigning ID to use it as a foreign key 
for(var i = 0; i < cancellationReceived.rule.length; i++) 
{ 
    rules[i] = 
    [ 
     cancellationReceived.rule[i].daysBefore, 
     cancellationReceived.rule[i].fee, 
     cancellationReceived.rule[i].type, 
     cancellationID 
    ] 
} 

for(var i = 0; i < rules.length; i++) 
{ 
    console.log(rules[i]); // ID is undefined 
} 

}); 

どうすればこの問題を解決できますか?私はコードを一時停止するためにsetTimeoutを使用しようとしましたが、何も変更されませんでした。

そして私は、MySQLのため、このノードモジュールを使用する - >https://github.com/mysqljs/mysql

答えて

1

この問題を解決する最良の方法はRTFMです。

connection.query('INSERT INTO cancellations (name, user_id) values ?', [cancellation], function(err, results) { 
    if (err) 
     return console.error(err); 

    // See https://github.com/mysqljs/mysql#getting-the-id-of-an-inserted-row 
    var cancellation_id = results.insertId; 

    // Generate sql for rules, join them by ; and execute as one query 
    // See https://github.com/mysqljs/mysql#multiple-statement-queries 
    connection.query(sqls, function(err) { 
     if (err) 
      return console.error(err); 

     // Send response here 
    }); 
}) 
関連する問題