【问题标题】:Node JS mySQL tripple query and lost of informationNode JS mySQL三重查询和信息丢失
【发布时间】:2017-06-12 15:39:09
【问题描述】:

在我的应用程序中,我有两个不同的表,它们通过第一个的 ID(一对多关系)相互关联。它应该首先以 JSON 格式从前端收集数据,如下所示:

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

一张用于取消,另一张用于规则。如果我想按此顺序排列这些信息,我需要先插入一条记录以进行取消。然后进行查询以找出该记录在数据库中的 ID 是什么,然后插入使用该 ID 作为外键的所有规则。但由于 Node 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

【问题讨论】:

    标签: mysql sql node.js database


    【解决方案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
        });
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多