2017-06-12 8 views
0

In meiner Anwendung habe ich zwei verschiedene Tabellen durch ID der ersten (eine zu viele Beziehung) miteinander verwandt. Es sollte zunächst die Daten aus der Frontend-Seite von im JSON-Format sammeln, die wie folgt aussieht:Knoten JS mySQL Tripple-Abfrage und Informationsverlust

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

Eine Tabelle für die Stornierung und die zweite für die Regeln wäre. Wenn ich diese Informationen in dieser Reihenfolge einfügen möchte, muss ich zuerst einen Datensatz für die Stornierung einfügen. Machen Sie dann eine Abfrage, um herauszufinden, was eine ID dieses Datensatzes in der Datenbank ist, und fügen Sie danach alle Regeln ein, die diese ID als Fremdschlüssel verwenden. Aber da Node JS asynchron ist, hole ich die Information über die ID der Aufzeichnungsprogrammsterne, um den Rest des Codes auszuführen, und betrachte diese Variable als undefiniert.

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 
} 

}); 

Wie kann ich dieses Problem lösen? Ich habe versucht, setTimeout zu verwenden, um meinen Code zu pausieren, aber es hat nichts geändert.

Und ich verwende diesen Knotenmodul für mysql ->https://github.com/mysqljs/mysql

Antwort

1

Der beste Weg, dieses Problem zu lösen RTFM ist.

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 
    }); 
})