Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Javascript TransactionError:事务已中止。在事务处。\u回滚_Javascript_Node.js_Sql Server_Nestjs_Typeorm - Fatal编程技术网

Javascript TransactionError:事务已中止。在事务处。\u回滚

Javascript TransactionError:事务已中止。在事务处。\u回滚,javascript,node.js,sql-server,nestjs,typeorm,Javascript,Node.js,Sql Server,Nestjs,Typeorm,我试图回滚失败的事务,但它抛出TransactionError 我尝试捕获异常失败的原因,但它只显示错误 我试图在导致异常的int字段中插入字符串 async create(tenantid: string, staff: StaffDto): Promise < any > { const connection = getConnection(); const queryRunner = connection.createQueryRunner(); await que

我试图回滚失败的事务,但它抛出TransactionError

我尝试捕获异常失败的原因,但它只显示错误

我试图在导致异常的int字段中插入字符串

async create(tenantid: string, staff: StaffDto): Promise < any > {
  const connection = getConnection();
  const queryRunner = connection.createQueryRunner();
  await queryRunner.connect();
  await queryRunner.startTransaction();

  try {
    const userQuery = `insert into Users(Username, Password)  Output Inserted.Id values('${User.Username}', '${User.Password)
  }')`;
    await queryRunner.query(userQuery);

  const query = `insert into Address(CountryId,StateProvinceId,City,Address1,Address2,ZipPostalCode,PhoneNumber )  Output Inserted.Id values('${staff.Address.CountryId}','${staff.Address.StateProvinceId}','${staff.Address.City}','${staff.Address.Address1}','${staff.Address.Address2}','${staff.Address.ZipPostalCode}','${staff.Address.PhoneNumber}')`;
  await queryRunner.query(query);

  await queryRunner.commitTransaction();
  return {
    ...staff,
    Id: userQueryResult[0].Id,
  };
} catch (err) {
  await queryRunner.rollbackTransaction();
  this.errorService.throwAPIError(err);

} finally {
  await queryRunner.release();
}
}
异步创建(tenantid:string,staff:StaffDto):Promise{ const connection=getConnection(); const queryRunner=connection.createQueryRunner(); 等待queryRunner.connect(); 等待queryRunner.startTransaction(); 试一试{ const userQuery=`insert into Users(Username,Password)输出Inserted.Id值('${User.Username}','${User.Password) }')`; 等待queryRunner.query(userQuery); const query=`插入地址(CountryId、StateProvinceId、City、Address1、Address2、ZipPostalCode、PhoneNumber)输出插入的.Id值('${staff.Address.CountryId}'、'${staff.Address.StateProvinceId}'、'${staff.Address.City}'、'${staff.Address.Address.Address2}'、'${staff.Address.ZipPostalCode}'、'${staff.Address.PhoneNumber}'; 等待queryRunner.query(查询); 等待queryRunner.commitTransaction(); 返回{ 工作人员 Id:userQueryResult[0]。Id, }; }捕捉(错误){ 等待queryRunner.rollbackTransaction(); 这个.errorService.throwAPIError(err); }最后{ 等待queryRunner.release(); } }
TransactionError:事务已中止。
事务处。_回滚(/Users/xxx/Documents/code/yyy/node_modules/mssql/lib/base.js:984:37)
事务处。\回滚(/Users/xxx/Documents/code/yyy/node\u modules/mssql/lib/tedious.js:370:11)
在Transaction.rollback(/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/base.js:957:12)
at/Users/xxx/Documents/code/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:156:37
在新的承诺()
在SqlServerQueryRunner。(/Users/xxx/Documents/code/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:155:16)
在步骤(/Users/xxx/Documents/code/yyy/node_modules/tslib/tslib.js:136:27)
在Object.next(/Users/xxx/Documents/code/yyy/node_modules/tslib/tslib.js:117:57)
at/Users/xxx/Documents/code/yyy/node_modules/tslib/tslib.js:110:75
在新的承诺()

这个.errorService.throwAPIError(err)是什么意思做什么?可能是控制台记录了
TransactionError
,但我不认为这里没有捕获到实际的异常


快速测试是删除
这个.errorService.throwAPIError(err)
并查看您是否仍能在控制台中收到该消息。

请在回滚事务之前编写错误捕获代码。因此,您将获得sql错误详细信息。与SQL Server中的TRY CATCH
块类似。查看此项了解更多详细信息。从sql查询中捕获错误可以,但问题在于回滚。它在回滚时抛出错误。我想知道为什么它不能回滚。甚至我也试图捕获rollbsck错误,但显示了与上面相同的结果。没有提供更多细节。当第二个查询失败时,第一个成功的查询不会回滚其更改。它甚至不会到达我的自定义异常处理程序。执行在await.queryrunner.rollbacktransaction()处停止。
TransactionError: Transaction has been aborted.
    at Transaction._rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/base.js:984:37)
    at Transaction._rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/tedious.js:370:11)
    at Transaction.rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/base.js:957:12)
    at /Users/xxx/Documents/codes/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:156:37
    at new Promise (<anonymous>)
    at SqlServerQueryRunner.<anonymous> (/Users/xxx/Documents/codes/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:155:16)
    at step (/Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:136:27)
    at Object.next (/Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:117:57)
    at /Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:110:75
    at new Promise (<anonymous>)