Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点pg和Express创建事务?_Node.js_Postgresql_Api_Rest_Express - Fatal编程技术网

Node.js 使用节点pg和Express创建事务?

Node.js 使用节点pg和Express创建事务?,node.js,postgresql,api,rest,express,Node.js,Postgresql,Api,Rest,Express,我正在尝试在Express API中使用节点postgres编写事务。[下面的代码按预期工作,主要是查找应该更正/更改的内容] 这将是一个POST请求,创建一个“事务”并更新一个单独表中的记录。所以基本上是一次两个查询。代码如下: 对于上下文,db是到postgres db的连接池 /@desc添加事务 //@route DELETE/api/v1/envelopes/:id/transactions exports.addEnvelopeTransaction=async(req,res)=>

我正在尝试在Express API中使用
节点postgres
编写
事务。[下面的代码按预期工作,主要是查找应该更正/更改的内容]

这将是一个
POST
请求,创建一个“事务”并更新一个单独表中的记录。所以基本上是一次两个查询。代码如下:

对于上下文,
db
是到postgres db的连接池

/@desc添加事务
//@route DELETE/api/v1/envelopes/:id/transactions
exports.addEnvelopeTransaction=async(req,res)=>{
const{id}=req.params;
const{title,amount}=req.body;
const date=新日期();
const envelopeQuery=“从信封中选择*,其中envelopes.id=$1”;
const transactionQuery=“插入交易(标题、金额、日期、信封id)值($1、$2、$3、$4)返回*”;
const updateEnvQuery=“更新信封集预算=预算-$1,其中id=$2返回*”;
试一试{
//使用SQL事务
等待db.query('BEGIN');
const envelope=await db.query(envelopequaly,[id])
如果(envelope.rowCount<1){
返回资源状态(404)。发送({
消息:“未找到信封信息”,
});
};
const newTransaction=await db.query(transactionQuery,[标题、金额、日期、id]);
wait db.query(updateEnvQuery,[amount,id]);
等待db.query('COMMIT');
资源状态(201)。发送({
状态:“成功”,
消息:“已创建新事务”,
数据:newTransaction.rows[0],
});
}捕捉(错误){
等待db.query('ROLLBACK');
返回资源状态(500)。发送({
错误:err.message
});
}
};
我在这里闻到一些不好的代码,我真的不知道我是否在适当的地方使用了
BEGIN
COMMIT
、和
ROLLBACK


我应该更改什么?

代码本身可以工作,但正如您指出的,它并不干净


我建议您使用某种查询生成器(例如,一个轻量级的库是knex.js()——这里有一个如何处理事务的示例->),而不是
节点postgres
库。

化妆品清洗这可以在文章中找到。