如果模型仅在根模块中,如何注入模型

Posted

技术标签:

【中文标题】如果模型仅在根模块中,如何注入模型【英文标题】:How to inject model if the model is in the root module only 【发布时间】:2019-05-07 20:00:22 【问题描述】:

我想在 NestJS 服务中注入一个 mongo db 模型。该模型仅存在于根模块中。

import  Injectable  from '@nestjs/common';
import  InjectModel  from '@nestjs/mongoose';
import  Model  from 'mongoose';
import  IFolderModel  from './interfaces/folder.interface';

@Injectable()
export class FolderService 
    constructor(@InjectModel('IFolder') private folderModel: Model<IFolderModel>) 

    

    async create(folderInstance: IFolderModel): Promise<IFolderModel> 
       const folderModelToBeSaved = new this.folderModel(folderInstance);
       return await folderModelToBeSaved.save();
    

    async findAll(): Promise<IFolderModel[]> 
       return await this.folderModel.find().exec();
    
 

使用npm run start启动应用程序时出现以下错误

Error: Nest can't resolve dependencies of the FolderService (?). Please make sure that the argument at index [0] is available in the AppModule context.

AppModule 的内容

 let mongodb = env.mongodb;
 let url = `mongodb://$mongodb.user:$mongodb.pwd@$mongodb.host:$mongodb.port/$mongodb.dbName`;

 @Module(
    imports: [MongooseModule.forRoot(url)],
    controllers: [AppController, FolderController],
    providers: [AppService, FolderService],
 )
 export class AppModule  

【问题讨论】:

【参考方案1】:

您还必须使用MongooseModule.forFeature 导入您的架构。通常,您会在根模块中设置数据库连接,然后在专用功能模块中导入模式。这就是为什么导入是分开的。

MongooseModule.forFeature([ name: 'Folder', schema: FolderSchema ])

如需更多信息,请参阅mongo docs。

【讨论】:

如果没有创建专用功能,有没有办法可以导入架构? 只需在与forRoot 导入相同的模块中执行MongooseModule.forFeature 导入。 :-)

以上是关于如果模型仅在根模块中,如何注入模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套js应用程序的根应用程序模块中注入模型

Prism:如何在区域中注入视图模型实例?

仅在需要时注入模块依赖项(如插件)

避免贫血域模型如何与 ORM、依赖注入和可靠方法一起使用

使用 NestJS 测试猫鼬模型

验证:如何使用Ninject注入模型状态包装器?