NestJS/TypeORM - 连接到多个数据库 - ConnectionNotFoundError

中等SQLr

当使用连接(UserConnection 和 PhotoConnection)注册自定义存储库时,使用 TypeORM 和 NestJS连接到两个数据库会引发ConnectionNotFoundError我在这里创建了一个最小的 repo https://github.com/masonridge/connissuewithndbTypeOrm 注册是在 NestJS 的 AppModule 中完成的

(app.module.ts)

@Module({
  imports: [

    TypeOrmModule.forRootAsync({
      name: 'PhotoConnection',
      useFactory: async () => {
        return {
          type: 'sqlite',
          synchronize: true,
          database: 'TestPhoto.sqlite',
          entities: [Photo],
        } as SqliteConnectionOptions;
      },
    }),
    TypeOrmModule.forRootAsync({
      name: 'UserConnection',
      useFactory: async () => {
        return {
          type: 'sqlite',
          synchronize: true,
          database: 'TestUser.sqlite',
          entities: [User],
        } as SqliteConnectionOptions;
      },
    }),
    // TypeOrmModule.forFeature([User, UserRepository], 'UserConnection'),
    // TypeOrmModule.forFeature([Photo, PhotoRepository], 'PhotoConnection'),
    PhotoModule, UserModule,
  ],

(photo.module.ts) DB connection1 - PhotoConnection 在这里注册

@Module({
  imports: [    
    TypeOrmModule.forFeature([PhotoRepository], 'PhotoConnection'),
  ],
  providers: [
    PhotoService,
  ],
  controllers: [PhotoController],
  exports: [TypeOrmModule],
})
export class PhotoModule {}

(user.module.ts) DB connection2 - UserConnection 在这里注册

@Module({
  imports: [
    TypeOrmModule.forFeature([UserRepository], 'UserConnection'),
  ],
  providers: [
    UserService,
  ],
  exports: [TypeOrmModule],
  controllers: [UserController],
})
export class UserModule {}

(user.repository.ts) 自定义存储库

@EntityRepository(User)
export class UserRepository extends Repository<User> {
  async createUser(name: string): Promise<string> {
    const user = this.create();
    user.username = name;
    user.salt = 'salt';
    user.password = 'xxkdkdk';
    user.save();
    return name;
  }
}

(photo.repository.ts)

@EntityRepository(Photo)
export class PhotoRepository extends Repository<Photo> {
  async createPhoto(name: string): Promise<string> {
    const photo = this.create();
    photo.name = name;
    photo.save();
    return name;
  }
}

使用连接 (PhotoConnection) (photo.service.ts)将 repo 注入到服务中

export class PhotoService {
  constructor(
    @InjectRepository(Photo, 'PhotoConnection')
        private readonly photoRepository: PhotoRepository,
  ) {}

在这里使用UserConnection (user.service.ts)

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User, 'UserConnection')
    private readonly userRepository: UserRepository,
  ) {}

应用程序启动正常,但在 POST 请求时抛出 ConnectionNotFoundError 错误

(节点:190812)未处理的PromiseRejectionWarning:ConnectionNotFoundError:未找到连接“默认”。在新的 ConnectionNotFoundError (C:\nestjs\type-orm-dbscratch\node_modules\typeorm\error\ConnectionNotFoundError.js:10:28) 在 ConnectionManager.get (C:\nestjs\type-orm-dbscratch\node_modules\typeorm\connection \ConnectionManager.js:38:19) 在 Object.getConnection (C:\nestjs\type-orm-dbscratch\node_modules\typeorm\index.js:244:35) 在 Function.BaseEntity.getRepository (C:\nestjs\type -orm-dbscratch\node_modules\typeorm\repository\BaseEntity.js:67:57) 在 Photo.BaseEntity.save (C:\nestjs\type-orm-dbscratch\node_modules\typeorm\repository\BaseEntity.js:27:33 ) 在 PhotoRepository.createPhoto (C:\nestjs\type-orm-dbscratch\dist\db\photo\photo.repository.js:15:15) 在 PhotoService.createPhoto (C:\nestjs\type-orm-dbscratch\dist \db\照片\照片。

我想知道注册是否有问题。任何帮助,将不胜感激。

杰伊·麦克唐尼

看起来问题在于使用DataMapperActiveRecord的 TypeORM 方法之间使用该ActiveRecord方法似乎不支持 NestJS 的命名存储库,因此正在寻找名为'default'. 如果您删除extends BaseEntity并改用存储库的保存方法this.save(user)user.save()您将获得成功保存。我没有看到设置连接的直接方法,ActiveRecord但如果这仍然是您想要遵循的方法,它可能是某个地方的一个选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章