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 ?
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
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.
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.
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);