web-dev-qa-db-ja.com

TypeORMで接続「デフォルト」が見つかりませんでした

TypeORMをNestJSで使用していますが、エンティティを適切に保存できません。

接続の作成は機能し、postgresは5432ポートで実行されています。資格情報も問題ありません。

しかし、entity.save()でリソースを保存する必要があるとき、私は得ました:

Connection "default" was not found.


Error
    at new ConnectionNotFoundError (/.../ConnectionNotFoundError.ts:11:22)

TypeORM ConnectionManagerのソースファイルをチェックしました( https://github.com/typeorm/typeorm/blob/master/src/connection/ConnectionManager.ts )が、TypeORMが初めて接続を作成するようです名前を指定しない場合は「デフォルト」の名前が付けられますが、これは私にとっては事実です。

TypeOrmModuleでTypeORMをセットアップします

TypeOrmModule.forRoot({
      type: config.db.type,
      Host: config.db.Host,
      port: config.db.port,
      username: config.db.user,
      password: config.db.password,
      database: config.db.database,
      entities: [
        __dirname + '/../../dtos/entities/*.entity.js',
      ]
    })

もちろん、私の定数は正しいです。何か案は ?

9
ValentinV

接続を確立せずにリポジトリまたはマネージャーを作成しようとしています。

関数内でこのconst shopkeeperRepository = getRepository(Shopkeeper);を実行してみてください。それが動作します

14
Saras Arya

Saras Aryaは正しい答えを提供しましたが、同じエラーが発生しました

ConnectionNotFoundError:接続「デフォルト」が見つかりませんでした。

私のtypeORMエンティティには@Entity()デコレータがあり、BaseEntityを拡張したという事実が原因です。

二人は一緒に暮らすことはできません。

0
amitben

別の答えをお探しの方は、こちらをご覧ください。

私の場合、問題はdb設定でnameを渡していたためです。

_export const dbConfig = {
    name: 'myDB',
    ...
}

await createConnection(dbConfig) // like this
_

その結果、唯一の接続サーバーはmyDBではなくdefaultを認識します。

同時に、私のサービスでは、リポジトリはnameなしで挿入され、defaultにフォールバックします。 (サービスは結果としてdefault接続を探します)

_@Service() // typedi
export class Service {
    constructor(
        // inject without name -> fallback to default
        @InjectRepository() private readonly repository
    ) {}
}
_

修正として、db configのnameプロパティを削除しました。

または、myDB@InjectRepository('myDB')のようなInjectRepositoryのパラメーターとして渡すこともできますが、どちらの方法でも機能します。

0
이준형

接続された名前を指定しないと、デフォルトの「デフォルト」になります。

const manager = getConnectionManager().get('your_orm_name');
const repository = manager.getRepository<AModel>(Model);
0
Dragos Podaru