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

Ami*_*ube 4 javascript mongoose node.js typescript nestjs

我想在 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();
    }
} 
Run Code Online (Sandbox Code Playgroud)

我在使用启动应用程序时收到以下错误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.

应用程序模块的内容

 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 { }
Run Code Online (Sandbox Code Playgroud)

Kim*_*ern 6

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

MongooseModule.forFeature([{ name: 'Folder', schema: FolderSchema }])
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅mongo 文档

  • 只需在与“forRoot”导入相同的模块中导入“MongooseModule.forFeature”即可。:-) (5认同)