web-dev-qa-db-fra.com

La connexion "par défaut" est introuvable avec TypeORM

J'utilise TypeORM avec NestJS et je ne peux pas enregistrer correctement une entité.

La création de connexion fonctionne, postgres fonctionne sur le port 5432. Les informations d'identification sont également correctes.

Cependant, lorsque j'ai besoin d'enregistrer une ressource avec entity.save (), j'ai obtenu:

Connection "default" was not found.


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

J'ai vérifié le fichier source de TypeORM ConnectionManager ( https://github.com/typeorm/typeorm/blob/master/src/connection/ConnectionManager.ts ) mais il semble que la première fois que TypeORM crée une connexion il attribue un nom "par défaut" si nous n'en fournissons pas, ce qui est le cas pour moi.

J'ai configuré TypeORM avec TypeOrmModule comme

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',
      ]
    })

Bien sûr, mes constantes sont correctes. Des idées ?

9
ValentinV

Vous essayez de créer un référentiel ou un gestionnaire sans que la connexion soit établie.

Essayez de faire ceci const shopkeeperRepository = getRepository(Shopkeeper); à l'intérieur d'une fonction. ça va marcher

14
Saras Arya

Bien que Saras Arya ait fourni la bonne réponse, j'ai rencontré la même erreur

ConnectionNotFoundError: La connexion "par défaut" est introuvable.

en raison du fait que mon entité typeORM avait un décorateur @Entity() et qu'elle avait étendu BaseEntity.

Les deux ne peuvent pas vivre ensemble.

0
amitben

Pour ceux d'entre vous qui cherchent une autre réponse, consultez-la.

Dans mon cas, le problème était dû au fait que je passais name dans ma configuration db.

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

await createConnection(dbConfig) // like this

Par conséquent, le seul serveur de connexion connu est myDB pas default.

Dans le même temps, dans mon service, le référentiel a été injecté sans name qui reviendra à default. (Le service recherchera une connexion default en conséquence)

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

Comme correctif, j'ai supprimé la propriété name dans ma configuration db.

Ou vous pouvez passer myDB comme paramètre pour InjectRepository comme @InjectRepository('myDB'), dans tous les cas.

0
이준형

la réponse votée n'est pas nécessairement correcte, si vous ne spécifiez pas le nom de la connexion, il sera par défaut "par défaut".

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