我有一个简单的api与我的移动应用程序通信,我有一些更新要做。
我想在同一功能(或同一路线)进行2次更新,但我不知道是否可能。
下面是dboperation部分:
async function updateCusto() {
try {
let pool = await sql.connect(config);
let updateCusto = await pool.request()
.input('input_parameter1', sql.Int, CodOS)
.input('input_parameter2', sql.Int, CodProduto)
.query("update osproduto set custounit=produto.precocusto, valorunitario=produto.precosugerido from OSProduto INNER JOIN Produto ON OSProduto.CodProduto = Produto.Codigo where codproduto=@input_parameter2 and codos=@input_parameter1")
.query("Update OSProduto set sub=qtde*valorunitario where codos=@input_parameter1") //the second one, doenst work
return updateCusto.recordsets;
}
catch (error) {
console.log(error);
throw error;
}
}
这是路由部分:
router.route("/updateCusto").post((request, response) => {
CodOS = request.body.CodOs;
CodProduto = request.body.CodProduto;
dboperations.updateCusto(CodOS, CodProduto).then(result => {
console.log(result);
response.json("Update ok!");
})
.catch(error => response.json({ error }))
})
我该怎么做?是否有一种方法可以在同一操作上运行2个更新?或者在第一次更新之后,我需要在同一路由上创建另一个操作来使用(如果是,我该怎么做?)
这绝对是可能的,事实上我会把它作为一个事务,这样,如果其中一个查询失败,将进行回滚,以保持数据库的状态。
以下是我的建议:
- 查看数据库事务
- 用ORM(如Sequelize或KnexJS)代替纯SQL,它将帮助您通过调用
await OsProduto.update({ where: { id: 0 }}, newData);
等方法来防止查询错误