Как использовать внешние сущности в проекте nestjs с typeorm? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать объекты типа orm, определенные вне проекта. То есть у меня есть два проекта: модели и core-api. Models - это пакет npm, который экспортирует определение сущностей. Итак, из core-api (проект nestjs) я пытаюсь определить соединение, используя эти объекты. Примерно так:

@Module({
    imports: [ TypeOrmModule.forRoot({
    type: 'postgres',
    host: 'postgres',
    port: 5432,
    username: 'myuser',
    password: 'mypass',
    database: 'mydb',
    entities: [
        __dirname + '../node_modules/something/models/src/*.entity.ts'
    ],
    synchronize: true,
    }), AModule ],
    controllers: [],
    providers: [],
})
export class AppModule {}

Затем в модуле A я импортирую сущность A из пакета npm:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AsController } from './As.controller';
import { AsService } from './As.service';
import { A } from 'something/models';

@Module({
  imports: [TypeOrmModule.forFeature([ A ])],
  controllers: [AController],
  providers: [AService],
})
export class AModule {}

Это заканчивается следующей ошибкой:

RepositoryNotFoundError: No repository for "A" was found. Looks like this entity is not registered in current "https://stackoverflow.com/a/54191513/3943197https://stackoverflow.com/a/54191513/3943197default" connection?

Я совершенно заблудился, как следовать, так как не понимаю, как это работает под капотом. Я видел код typeorm и @ nestjs / typeorm, но не мог понять, как его решить.

Спасибо!

UPDATE: Я мог бы заставить его работать, добавляя класс сущности вместо пути, как сказал @serianox. Кроме того, пакет something/models npm экспортирует отдельный модуль nest. Этот модуль импортирует / экспортирует объекты, определенные в пакете. Таким образом, я мог бы внедрить сущности в основное приложение.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете передавать ссылки на классы "сущностям" вместо пути, например:

import {Entity1, Entity2} from '@models'

@Module({
    imports: [ TypeOrmModule.forRoot({
    type: 'postgres',
    host: 'postgres',
    port: 5432,
    username: 'myuser',
    password: 'mypass',
    database: 'mydb',
    entities: [
        Entity1, Entity2
    ],
    synchronize: true,
    }), AModule ],
    controllers: [],
    providers: [],
})
export class AppModule {}
0 голосов
/ 09 января 2019

Кажется, вы импортируете .ts файлы из node_modules. Я полагаю, что после того, как вы создали свой пакет npm, эти сущности теперь являются .js файлами. Вы должны попытаться изменить свое выражение, чтобы оно могло анализировать файлы .js.

Лично я никогда не использую ts-node, поскольку это приносит такие проблемы, и отладка на самом деле недоступна. Я чувствую, что вы всегда должны использовать node время выполнения и парсинг только .js файлов (также, это ближе к рабочему времени выполнения).

...