如何在不同的NestJS模块中引用Mongoose模型

时间:2019-10-30 16:22:21

标签: node.js mongoose nestjs

我是NestJS的新手。我敢肯定这是一个简单的问题,但是我找不到答案。

nest docs中,建议每个模型有一个模块。这涉及使用MongooseModule.forFeature创建模型:

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

文档说:

  

如果您还想在另一个模块中使用模型,请将MongooseModule添加到exports的{​​{1}}部分,然后在另一个模块中导入CatsModule

我的问题是如何在新模块中引用模型。

我可以看到:

  1. How this would be done(如果模型是使用CatsModule创建的)
  2. What exports are needed
  3. A question暗示可以使用mongoose.model('Name', MySchema)完成此操作,但是感觉它重复了import { Model } from 'mongoose'; @InjectModel('name') myModel: Model<MyInterface>)完成的模型创建,因为它再次将猫鼬模型与模式结合在一起< / li>

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

所以我认为方法3是正确的方法。

根据@silvelo的this comment,在注入模式(但不是模式本身)时,您必须分别提供集合名称和接口:

@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>,
  ) {}
}