Как внедрить интерфейс в модуль приложения nest js - PullRequest
0 голосов
/ 23 апреля 2020

Вот скриншот ошибки:

enter image description here

Я получил много ответов на эту проблему, но не нашел точного правильного решения. Когда Я удаляю UsersModule из кода ниже, тогда я получил ошибку 404, не найденную в почтальоне. Но когда я пишу UsersModule в коде ниже, я получил ошибку, которая упоминается на скриншоте.

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

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

Вот код Usersinterface:

import * as mongoose from 'mongoose'

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

Вот код UsersModule:

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

Вот код UsersService:

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

1 Ответ

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

Интерфейсы существуют только во время компиляции и используются для проверки типов, и поэтому не могут использоваться для токенов инъекций. Если вы хотите использовать «интерфейс» для токена инъекции, вы можете объединить его с @Inject() и фактическим токеном инъекции с помощью пользовательских провайдеров или с помощью интерфейса класса (создание класса без логики c для использования больше как форма, чем реальный объектно-ориентированный класс.

При этом похоже, что вы пытаетесь внедрить модель Mon goose в вашу UsersService. Для этого вам нужно убедиться, что у вас есть MongooseModule.forFeature([schemaObject]) в массиве imports вашего текущего модуля. Пример на GitHub показывает довольно хороший пример.

...