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

Posted

技术标签:

【中文标题】如何在嵌套js应用程序的根应用程序模块中注入模型【英文标题】:How to inject model in root app module in nest js app 【发布时间】:2020-08-02 23:23:42 【问题描述】:

您好,我的 Nest 应用程序出现错误,这是错误的屏幕截图:

这里是app模块的代码:

@Module(
  imports: [AppModule,CrudModule,MongooseModule.forRoot("mongodb://localhost:27017/mydb"),AuthModule,UsersModule,MulterModule.register(
    dest:'./uploads',
  )],
  controllers: [AppController],
  providers: [AppService,AuthService,UsersService,JwtService],
)
export class AppModule 

这是模型的代码:

export interface credentials extends mongoose.Document
    email:String,
    password:String

这是UsersServices的代码:

import  Injectable  from '@nestjs/common';
//import logindto from 'src/crud/DTO/login.dto'
import credentials, studentmodel from 'src/crud/crud.model'
import model,Model from 'mongoose'
import InjectModel from '@nestjs/mongoose'
//export type User = any;

@Injectable()
export class UsersService 
 constructor(@InjectModel('credentials')private readonly credentials:Model<credentials> ) 
  //constructor(@InjectModel('student')private readonly credentials:Model<studentmodel> )

  async findByEmail(username: string): Promise<any> 
    return await this.credentials.findOne(
        where: 
            email: username,
        
    );
  

【问题讨论】:

错误提示nestjs 无法解析您的UsersService 的依赖关系。贴出服务代码 已添加代码。问题已更新 【参考方案1】:

尝试添加 MongooseModule.forFeature([ name: 'credentials', schema: credentials ]) 到 AppModule 的导入部分。

架构方面的用户服务和身份验证应该封装在它们自己的模块中。

【讨论】:

【参考方案2】:

除了 kaznovac 所说的之外,您还需要从 imports 数组中删除您的 AppModule。此外,看起来您已经拥有UsersModule,您应该从AppModuleproviders 数组中删除UsersModule 提供的所有提供程序。否则,Nest 将尝试再次实例化这些提供程序。

【讨论】:

我有一个用于 CRUD API 的 CrudModule。一个是根模块,它是 AppModule,我在其中进行了 mongo db 连接。按照你的方法,我得到了错误,错误:Nest can't resolve dependencies CrudService (?) 的。请确保索引 [0] 处的参数 studentModel 在 CrudModule 上下文中可用 嗯,您在模块内使用的任何提供程序也需要在同一个模块中导入。这是 NestJS 的基石。因此,您可以将CrudModule 添加到UsersModuleimports 数组中,或者您可以将CrudModule 设为@Global(),只要确保您知道自己在做什么。

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

如何使用 Backbone.Js 创建嵌套模型

在装饰器中使用全局嵌套模块

如何要求深度嵌套的 NodeJS 模块?

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

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

在嵌套 js 微服务控制器中使用功能模块服务的问题