我有一個Web服務器,允許用戶從服務器獲取項目。如何確保事務一次發生一次
一旦該項目被提取,它將被刪除。並且只有一個用戶可能可以獲取該項目。
我目前正在MySQL數據庫上運行我的nodejs服務器。這是nodejs已經處理的事情,還是我必須找出一種方法來確保這些事務一次發生一次。如果這不是自動處理的,那麼是否有框架來處理這個問題?
我有一個Web服務器,允許用戶從服務器獲取項目。如何確保事務一次發生一次
一旦該項目被提取,它將被刪除。並且只有一個用戶可能可以獲取該項目。
我目前正在MySQL數據庫上運行我的nodejs服務器。這是nodejs已經處理的事情,還是我必須找出一種方法來確保這些事務一次發生一次。如果這不是自動處理的,那麼是否有框架來處理這個問題?
您需要手動開始和結束交易。
下面是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 */
你可能會尋找鎖或互斥用的NodeJS,這裏是一個答案,類似的話題:How to lock (Mutex) in NodeJS?
你的意思是「一次一個什麼「? web服務器通常處理來自許多用戶的交易。如果你向我們展示了你的代碼,我們可以更具體地幫助你,並且可能會給你更多更好的建議,以便我們可以確切地看到你想要做的事情。 – jfriend00