NestJS mongoose Model dependency not resolved

Viewed 37

My UserModel is not resolved in repository via @InjectModel(). I'm initializing the database through a separate provider which is imported to the user's module. I tried to export the mongo provider explicitly from user's module. but the problem still persists.

Please refer to the code below:

MongoDb provider

  imports: [
    MongooseModule.forRootAsync({
      imports: [MongoConfigModule],
      useFactory: async (mongoConfigService: MongoConfigService) => ({
        uri: mongoConfigService.dbUrl,
        useNewUrlParser: true,
        isGlobal: true,
      }),
      connectionName: 'user',
      inject: [MongoConfigService],
    }),
  ],
})
export class MongoProviderModule {}

User schema

import { Document } from 'mongoose';

export type UserDocument = User & Document;

@Schema()
export class User {
  @Prop()
  userId: string;

  @Prop()
  email: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

User repository

@Injectable()
export class UserRepository {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  async findOne(userFilterQuery: FilterQuery<User>): Promise<User> {
    return this.userModel.findOne(userFilterQuery);
  }
}

user module

@Module({
  imports: [
    MongoProviderModule,
    MongooseModule.forFeature(
      [{ name: User.name, schema: UserSchema }],
      'user',
    ),
  ],
  controllers: [UserController],
  providers: [UserService, UserRepository],
})
export class UserModule {}

app module

@Module({
  imports: [AppConfigModule, UserModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

The error:

 Nest can't resolve dependencies of the UserRepository (?). Please make sure that the argument UserModel at index [0] is available in the UserModule context.

Potential solutions:
- If UserModel is a provider, is it part of the current UserModule?
- If UserModel is exported from a separate @Module, is that module imported within UserModule?
1 Answers

If database connection is configured with connection name then specify it also at the repository Before

  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

After

  constructor(@InjectModel(User.name, 'connectionName') private userModel: Model<UserDocument>) {}
Related