2017-03-04 37 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 */