Вы можете использовать официальную интеграцию (пакет @nestjs/typeorm
), чтобы ваш код не заботился о подключении к базе данных ( официальная документация ).
С TypeOrmModule
(@nestjs/typeorm
), вы можете создать (и импортировать) динамический c модуль, отвечающий за установление соединения с базой данных.
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
Тогда вам не нужно заботиться о соединении в коде ваших репозиториев.
Если вы уже создали соединение, используя «raw» TypeORM (скажем, когда ваш приложение запускается), то Repository
уже знает, как его использовать. Вы можете перейти к вашему запросу напрямую, выполнив что-то вроде этого:
try {
const refreshToken = await this.manager.transaction(async entityManager => {
await entityManager.delete(RefreshToken, { token });
return entityManager.save(RefreshToken, this.buildToken(user));
});
// commit done: use refreshToken here
} catch (error) {
// rollback done: handle error here
}
Вы не можете начать транзакцию напрямую из репозитория, но вы можете получить доступ (publi c API) к его менеджеру, который может запустить сделка. Он предоставляет менеджеру сущностей, который * должен использоваться для всех операций транзакции.