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',
]
})
もちろん、私の定数は正しいです。何か案は ?
接続を確立せずにリポジトリまたはマネージャーを作成しようとしています。
関数内でこのconst shopkeeperRepository = getRepository(Shopkeeper);
を実行してみてください。それが動作します
Saras Aryaは正しい答えを提供しましたが、同じエラーが発生しました
ConnectionNotFoundError:接続「デフォルト」が見つかりませんでした。
私のtypeORM
エンティティには@Entity()
デコレータがあり、BaseEntity
を拡張したという事実が原因です。
二人は一緒に暮らすことはできません。
別の答えをお探しの方は、こちらをご覧ください。
私の場合、問題は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
のパラメーターとして渡すこともできますが、どちらの方法でも機能します。
接続された名前を指定しないと、デフォルトの「デフォルト」になります。
const manager = getConnectionManager().get('your_orm_name');
const repository = manager.getRepository<AModel>(Model);