Как ссылаться на модель Mongoose в другом модуле NestJS - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в NestJS. Я уверен, что это простой вопрос, но я просто не могу найти ответ.

В документах nest рекомендуется использовать один модуль на модель. Это включает в себя создание модели с использованием MongooseModule.forFeature:

imports: [MongooseModule.forFeature([{ name: 'Cat', schema: CatSchema }])]

В документации сказано:

Если вы также хотите использовать модели в другом модуле, добавьте MongooseModule в exports раздел CatsModule и импорт CatsModule в другой модуль

У меня вопрос, как ссылаться на модель в новом модуле.

Я вижу:

  1. Как это будет сделано , если модель была создана с использованием mongoose.model('Name', MySchema)
  2. Какой экспорт необходим
  3. Вопрос , который подразумевает, что это будет сделано с использованием import { Model } from 'mongoose'; @InjectModel('name') myModel: Model<MyInterface>), но похоже, что это повторяет создание модели, которое выполняется с помощью MongooseModule.forFeature, потому что он снова объединяет модель мангусты со схемой

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 31 октября 2019

Так что я думаю, что метод 3 является правильным.

В соответствии с этим комментарием от @silvelo вы должны отдельно указать имя коллекции и интерфейс при внедрении схемы (но не самой схемы):

@Module({
  imports: [
    MongooseModule.forFeature([
      { name: GAME_COLLECTION_NAME, schema: GameSchema },
    ]),
  ],
  controllers: [GamesController],
  components: [GamesService],
  exports: [GamesService, MongooseModule],
})
export class GamesModule implements NestModule {}

@Module({
  imports: [
    MongooseModule.forFeature([
      { name: USER_COLLECTION_NAME, schema: UserSchema },
    ]),
    GamesModule,
    LinksModule,
  ],
  controllers: [UsersController],
  components: [UsersService],
  exports: [UsersService],
})
export class UsersModule implements NestModule {}

@Component()
export class UsersService {
  constructor(
    @InjectModel(GAME_COLLECTION_NAME) private readonly gameModel: Model<Game>,
    @InjectModel(USER_COLLECTION_NAME) private readonly userModel: Model<User>,
  ) {}
}
...