【问题标题】:Node.js, multiple MySQL insertionsNode.js,多个 MySQL 插入
【发布时间】:2017-06-22 15:46:25
【问题描述】:

我想为我的服务器-客户端-应用程序以特定的顺序插入多个 MySQL。

var con = createDatabaseConnection();

function createDatabaseConnection() {
return (mysql.createConnection({
        host: // hostIp,
        user: // user,
        password: //pw,
        database: //databasename
    });
}

function writeFoo(fooObject) {
   var sql = // prepare sql insert for fooObject;
   con.query(sql, function (err) {
      // ? Is inserted data ready to use ?
   }
});

function writeBar(barObject) {
   var sql = // prepare sql insert for barObject;
   con.query(sql, function (err) {
      // ? Is inserted data ready to use ?
   });
});

// Both arrays containing an unpredictable amount of objects
var fooArray = [];
var barArray = [];

关键是我必须绝对确定,fooArray 中的 fooObjects 是在 barArray 插入之前插入的。因为writeBar() 中使用的 SQL INSERT 语句包含一个 SELECT 语句,该语句必须找到插入在writeFoo() 中的数据。 并且在任何时候都可能发生事件(客户端发送需要插入的数据),这也需要此功能。

实际情况有点复杂,但我认为这是目前的主要问题。

【问题讨论】:

标签: javascript mysql node.js sql-insert


【解决方案1】:

您可以将它们链接在promise 中,这样您就可以确保每次通话都井井有条,例如:

var con;
function createDatabaseConnection() {
    return new Promise(function (resolve, reject) {
        mysql.createConnection({
            host: hostIp,
            user: user,
            password: pw,
            database: databasename
        }, function(err, res){
            if(err) reject(err);
            else resolve(res);
        });
    });
}

function writeFoo(fooObject) {
    let sql = fooObject;
    return new Promise(function (resolve, reject) {
        con.query(sql, function (err, res) {
            if(err) reject(err);
            else resolve(res);
        });
    });
}

function writeBar(barObject) {
    let sql = barObject;
    return new Promise(function (resolve, reject) {
        con.query(sql, function (err, res) {
            if(err) reject(err);
            else resolve(res);
        });
    });
}

createDatabaseConnection()
    .catch(function (error) {
        // connection failed
        // log info
        console.error(error);
        process.exit(0);
    })
    .then(function (res) {
        con = res;
        return writeFoo(fooObject);
    })
    .catch(function (error) {
        // writeFoo(fooObject) failed
        // log info
        console.error(error);
        process.exit(0);
    })
    .then(function () {
        return writeBar(barObject);
    })
    .catch(function (error) {
        // writeBar(barObject) failed
        // log info
        console.error(error);
        process.exit(0);
    });

【讨论】:

    【解决方案2】:

    并不是说 ORM 总是最好的,但 http://docs.sequelizejs.com/ 与节点配合得很好。那里有一个批量插入选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多