如何确保交易一次发生一次

时间:2017-03-04 20:49:00

标签: node.js

我有一个允许用户从服务器获取项目的Web服务器。

获取该项后,将删除该项。并且只有一个用户可能能够获取该项目。

我目前在mysql数据库上运行我的nodejs服务器。这是nodejs已经处理过的事情,还是我必须找到一种方法来确保这些事务一次发生一次。如果这是不能自动处理的事情,那么是否有任何框架可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要手动开始和结束交易。

以下是MySQL的示例代码:

var mysql = require('mysql');

var connection = mysql.createConnection(
    {
      host     : 'localhost',
      user     : 'YOUR_USERNAME',
      password : 'YOUR_PASSWORD',
      database : 'DB_NAME'
    }
);

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});

/* Begin transaction */
connection.beginTransaction(function(err) {
  if (err) { throw err; }
  connection.query('INSERT INTO names SET name=?', "sameer", function(err, result) {
    if (err) { 
      connection.rollback(function() {
        throw err;
      });
    }

    var log = result.insertId;

    connection.query('INSERT INTO log SET logid=?', log, function(err, result) {
      if (err) { 
        connection.rollback(function() {
          throw err;
        });
      }  
      connection.commit(function(err) {
        if (err) { 
          connection.rollback(function() {
            throw err;
          });
        }
        console.log('Transaction Complete.');
        connection.end();
      });
    });
  });
});
/* End transaction */

答案 1 :(得分:0)

您可能正在寻找带有nodejs的锁或互斥锁,以下是类似主题的答案:How to lock (Mutex) in NodeJS?