Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 (Nestjs)当创建一个typeorm托管事务并在其中使用一组不同的方法时,我是否必须将queryRunner传递给所有这些方法?_Node.js_Nestjs_Typeorm - Fatal编程技术网

Node.js (Nestjs)当创建一个typeorm托管事务并在其中使用一组不同的方法时,我是否必须将queryRunner传递给所有这些方法?

Node.js (Nestjs)当创建一个typeorm托管事务并在其中使用一组不同的方法时,我是否必须将queryRunner传递给所有这些方法?,node.js,nestjs,typeorm,Node.js,Nestjs,Typeorm,我会详细说明的 假设我得到了这个事务方法(它的代码不完整,但足以说明这个想法): 公共异步创建(createUserDto:RegisterUserDto):承诺{ const queryRunner=this.connection.createQueryRunner(); 等待queryRunner.connect(); 等待queryRunner.startTransaction(); 试一试{ 常量registerUserDeviceBody:IRegisterUserDevice={ d

我会详细说明的

假设我得到了这个事务方法(它的代码不完整,但足以说明这个想法):

公共异步创建(createUserDto:RegisterUserDto):承诺{ const queryRunner=this.connection.createQueryRunner(); 等待queryRunner.connect(); 等待queryRunner.startTransaction(); 试一试{ 常量registerUserDeviceBody:IRegisterUserDevice={ deviceIP:createUserDto.deviceIP, deviceName:createUserDto.deviceName, deviceIdentifier:createUserDto.deviceName, }; const userDevice=wait this.registerUserDevice(registerUserDeviceBody,queryRunner); 等待queryRunner.commitTransaction(); }捕捉(错误){ 等待queryRunner.rollbackTransaction(); 抛出新的HttpException(err.message、HttpStatus.BAD_请求); }最后{ 等待queryRunner.release(); } 返回; } 在这里,我将
queryRunner
作为参数传递给
registerUserDevice
方法,据我所知,这样做是为了在一个DB连接中执行整个操作,并避免DB锁等。我说得对吗?我总是要这样做吗

我问这个问题的原因是因为我正在实现一个方法,它将使用一组早期实现的方法来创建它们自己的数据库连接(使用存储库模式),我试图找出应该重构代码的内容和方式

    public async create(createUserDto: RegisterUserDto): Promise<UserEntity> {
        const queryRunner = this.connection.createQueryRunner();
        await queryRunner.connect();
        await queryRunner.startTransaction();
        try {
            const registerUserDeviceBody: IRegisterUserDevice = {
                deviceIP: createUserDto.deviceIP,
                deviceName: createUserDto.deviceName,
                deviceIdentifier: createUserDto.deviceName,
            };
            const userDevice = await this.registerUserDevice(registerUserDeviceBody, queryRunner);
            await queryRunner.commitTransaction();
        } catch (err) {
            await queryRunner.rollbackTransaction();
            throw new HttpException(err.message, HttpStatus.BAD_REQUEST);
        } finally {
            await queryRunner.release();
        }
        return;
    }