2017-03-04 6 views
-1

Ich habe einen Webserver, mit dem Benutzer Elemente von einem Server abrufen können.So stellen Sie sicher, dass Transaktionen nacheinander ausgeführt werden

Sobald das Element abgerufen wurde, wird es gelöscht. Und nur ein Benutzer sollte möglicherweise diesen Artikel abrufen können.

Ich führe gerade meinen Nodejs Server auf einer MySQL-Datenbank. Ist das etwas, um das nodejs schon kümmert, oder muss ich einen Weg finden, um sicherzustellen, dass diese Transaktionen einzeln passieren? Wenn dies nicht automatisch erledigt wird, gibt es dann Rahmenbedingungen, die dafür sorgen?

+0

Was Sie „einer nach dem anderen meine ich "? Webserver verarbeiten typischerweise Transaktionen von vielen Benutzern. Wir könnten Ihnen viel gezielter helfen und geben Ihnen möglicherweise viel, viel besseren Rat, wenn Sie uns Ihren Code zeigen, damit wir genau sehen können, was Sie zu tun versuchen. – jfriend00

Antwort

1

Sie müssen Transaktionen manuell starten und beenden.

Hier Codebeispiel für 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 */ 
Verwandte Themen