我有一个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