2017-03-04 35 views
-1

我有一个Web服务器,允许用户从服务器获取项目。如何确保事务一次发生一次

一旦该项目被提取,它将被删除。并且只有一个用户可能可以获取该项目。

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

+0

你的意思是“一次一个什么“? web服务器通常处理来自许多用户的交易。如果你向我们展示了你的代码,我们可以更具体地帮助你,并且可能会给你更多更好的建议,以便我们可以确切地看到你想要做的事情。 – jfriend00

回答

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 */