Ошибка: Nest не может разрешить зависимости UsersService - PullRequest
0 голосов
/ 23 апреля 2020

Я получил такую ​​ошибку:

Ошибка: Nest не может разрешить зависимости UsersService (?). Убедитесь, что аргумент Usersinterface в индексе [0] доступен в контексте UsersModule.

Потенциальные решения: - Если Usersinterface является поставщиком, является ли он частью текущего UsersModule?
- Если Usersinterface является экспортированный из отдельного модуля @Module, этот модуль импортирован в UsersModule?

 @Module({
imports: [ /* the Module containing Usersinterface */ ]
  })

Я получил много ответов на эту проблему, но эти ответы мало чем отличаются от моей проблемы. В моей проблеме я получил ошибку интерфейса, а не любой контроллер или сервис.

Вот код интерфейса пользователя:

import * as mongoose from 'mongoose'

export interface Usersinterface  extends mongoose.Document {
    readonly username: string;
    readonly password: string;
}

Вот код модуля пользователя:

@Module({
  imports:[],
  providers: [UsersService],
  controllers: [UsersController]
})
export class UsersModule {}

Вот код приложения:

@Module({
  imports: [AppModule,UsersModule,MongooseModule.forRoot("mongodb://localhost:27017/test",{ useNewUrlParser: true })],
  controllers: [AppController],
  providers: [AppService]
})
export class AppModule {}

Вот код службы Users:

@Injectable()
export class UsersService {
    private hashLength = 16;
    constructor(@Inject('Usersinterface') private readonly userModel:Model<Usersinterface>) {}

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Как я только что ответил в на ваш другой вопрос , вам нужно предоставить модулю правильный контекст того, какие поставщики доступны. Для этого вам нужно добавить MongooseMOdule.forFeature([schemaObject]) в ваш массив UsersModule imports. В итоге все должно выглядеть так:

@Module({
  imports: [MongooseModule.forFeautre([{ name: 'Usersinterface', schema: UsersSchema }]) // you need to create the UsersSchema,
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}
@Injectable()
export class UsersService {
  private hasLength = 16;
  // make sure this string matches the value in the MongooseModule.forFeature's name property
  constructor(@InjectModel('Usersinterface') private readonly userModel: Model<UsersInterface>) {}
0 голосов
/ 23 апреля 2020

Проблема связана с внедрением зависимостей, а не с вашим интерфейсом. Хотя вы не опубликовали код своего файла app.component.ts, я думаю, вполне вероятно, что у вас есть конструктор типа

constructor(private userService: UserService) {}

с добавленной UserService . Проблема в том, что у вас есть UserService , не предоставленный в AppModule , но в UserModule . Пожалуйста, предоставьте услугу в AppModule вместо этого или добавьте UserService только в контроллеры, которые вы объявляете в UserModule (что, вероятно, является лучшим способом).

...