Javascript 如何正确使用NodeJS中的事务?
我在节点应用程序中执行的查询有一个问题,这就是为什么我开始对每个查询使用async/await,但我不确定是否有更好的方法Javascript 如何正确使用NodeJS中的事务?,javascript,mysql,sql,node.js,transactions,Javascript,Mysql,Sql,Node.js,Transactions,我在节点应用程序中执行的查询有一个问题,这就是为什么我开始对每个查询使用async/await,但我不确定是否有更好的方法 router.post('/post/like', (req, res, next) => { let liker_id = req.body.liker_id; let liked_id = req.body.liked_id; let p_id = req.body.p_id; let results; console.lo
router.post('/post/like', (req, res, next) => {
let liker_id = req.body.liker_id;
let liked_id = req.body.liked_id;
let p_id = req.body.p_id;
let results;
console.log(req.body);
db.beginTransaction(async error => {
if (error) return res.status(500).json(error);
// update likes and dislikes tables
// Add row to like tables and
// if dislikes table has row with same p_id and liker_id
// delete the row
results = await sqlTransaction(`insert ignore into likes (liker_id, p_id, liked_id) values (${db.escape(liker_id)}, ${db.escape(p_id)}, ${db.escape(liked_id)})`).catch(error => {
return res.status(500).json(error);
})
if (results["affectedRows"] == 0) return res.status(200).json({
msg: "Was already liked by the user"
});
results = await sqlTransaction(`select * from dislikes where disliker_id = ${db.escape(liker_id)} and p_id=${db.escape(p_id)}`).catch(error => {
return res.status(500).json(error);
})
if (results.length > 0) {
await sqlTransaction(`delete from dislikes where disliker_id = ${db.escape(liker_id)} and p_id=${db.escape(p_id)}`).catch(error => {
return res.status(500).json(error);
})
}
return res.status(200).json({msg: "Successfully liked post"});
})
})
使用函数sqlTransaction(query)
我刚开始阅读文档,我不太确定这种方法是否可行,或者您是否会避免这样的代码?如果是,你会改变什么
function sqlTransaction(query){
return new Promise((resolve, reject) => {
db.query(query, (error, results)=> {
if(error) {
return db.rollback(() => {
reject(error);
})
} else {
db.commit(error => {
if(error){
return db.rollback(() => {
reject(error);
})
}
resolve(results);
})
}
})
})
}