Node.js Sails.js中有Postgres的两个表上的事务
我试图用Postgresql和Sails Waterline.js ORM在Node.js(Sails.js)中实现一个事务 我试着适应这个。在这个答案中,我们只有一张桌子。在我的问题中,有两个表必须被锁定,直到事务结束 此代码应该做什么:Node.js Sails.js中有Postgres的两个表上的事务,node.js,postgresql,transactions,sails.js,Node.js,Postgresql,Transactions,Sails.js,我试图用Postgresql和Sails Waterline.js ORM在Node.js(Sails.js)中实现一个事务 我试着适应这个。在这个答案中,我们只有一张桌子。在我的问题中,有两个表必须被锁定,直到事务结束 此代码应该做什么: 使用:Id查找用户 如果此User.coins>0: 更新User.coins=0 在表MyTransaction中创建新记录 但代码段不会在两个表上锁定事务: try { // Start the transaction sails.mod
- 使用
:Id查找用户
- 如果此
:User.coins>0
- 更新
User.coins=0
- 在表MyTransaction中创建新记录
- 更新
try {
// Start the transaction
sails.models.user.query("BEGIN", function (err) {
if (err) {
throw new Error(err);
}
// Find the user
sails.models.user.findOne(currentUser.id).exec(function (err, user) {
if (err) {
throw new Error(err);
}
if (user.coins > 0) {
var params = {
user_id: req.session.passport.user,
publicAddress: bitcoin_address,
amount: user.coins,
wohnAdresse: wohnAdresse
}
// Update the user balance
user.coins = 0;
// Save the user
user.save(function (err) {
if (err) {
throw new Error(err);
}
sails.models.myTransaction.create(params).exec(function (err, transaction) {
if (err) {
payout = {success: false};
payout.transactionError = err;
console.log("ROLLBACK! ROLLBACK!")
return res.serverError(e);
}
// Commit the transaction
sails.models.user.query("COMMIT", function (err) {
if (err) {
throw new Error(err);
}
payout = {success: true};
console.log("PAYOUT PAYOUT", payout);
console.log("PAYOUT PAYOUT", transaction);
return res.json(payout);
});
});
});
} // END of if user.coins>0
});
});
}
// If there are any problems, roll back the transaction
catch (e) {
User.query("ROLLBACK", function (err) {
// The rollback failed--Catastrophic error!
if (err) {
return res.serverError(err);
}
// Return the error that resulted in the rollback
return res.serverError(e);
});
}
因此,当我在前端控制台中运行一个循环(5次)时,它会在myTransaction表中创建5条记录。我怎样才能正确地做到这一点 我强烈建议您使用sequelize及其事务(DOCS>>)。我不知道(也没有文档)如何用sequelize替换Sails.js的核心部分Waterline.js。我已经听说了Sequelize,它听起来不错,但我不认为有办法在Sails中取代它。我的意思是,对于原始的postgres查询,它也必须是可能的。好吧,我看到Sails中有一个Sequelize的钩子,但是我必须重写一个包含超过12k代码行的整个项目;因为它是用水线写的。我需要一个与水线或postgresql查询解决方案。请参阅嵌入到您的问题中的链接。有一个更新,sails1.0如何支持事务。是的,但是我的项目应该是稳定的,我正在使用旧的sails。Sails 1.0仍然是测试版。