Der*_*ill 13 mongoose node.js nestjs
我是 NestJS 的新手。我确信这是一个简单的问题,但我就是找不到答案。
在Nest 文档中,建议每个模型有一个模块。这涉及使用以下方法创建模型MongooseModule.forFeature:
imports: [MongooseModule.forFeature([{ name: 'Cat', schema: CatSchema }])]
Run Code Online (Sandbox Code Playgroud)
文档说:
如果您还想在另一个模块中使用模型,请将 MongooseModule 添加到其他模块的
exports部分CatsModule并导入CatsModule
我的问题是如何在新模块中引用模型。
我可以看到:
mongoose.model('Name', MySchema)import { Model } from 'mongoose'; @InjectModel('name') myModel: Model<MyInterface>),但感觉它重复了由 完成的模型创建MongooseModule.forFeature,因为它再次将 mongoose 模型与模式结合起来任何帮助表示赞赏!
Der*_*ill 15
所以我认为方法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>,
) {}
}
Run Code Online (Sandbox Code Playgroud)