When I try to use MongooseModel
on Users
I am getting the following error
Nest can’t resolve dependencies of the UserModel (?). Please make sure that the argument DatabaseConnection at index [0] is available in the MongooseModule context.
/src/database/database.module.ts
JavaScript
x
11
11
1
import { Module } from '@nestjs/common';
2
import { databaseProviders } from './database.providers';
3
import { ConfigModule } from '../config/config.module';
4
5
@Module({
6
imports: [ConfigModule],
7
providers: [databaseProviders],
8
exports: [databaseProviders],
9
})
10
export class DatabaseModule {}
11
/src/database/database.provider.ts
JavaScript
1
24
24
1
// NPM Packages
2
import * as mongoose from 'mongoose';
3
import { Provider } from '@nestjs/common';
4
import { MongooseModule } from '@nestjs/mongoose';
5
6
// Custom Packages
7
import { ConfigService } from '../config/config.service';
8
9
export const databaseProviders: Provider[] = [
10
{
11
inject: [ConfigService],
12
provide: 'DATABASE_CONNECTION',
13
useFactory: async (
14
configService: ConfigService,
15
): Promise<typeof mongoose> =>
16
await mongoose.connect(configService.get('MONGODB_URI'), {
17
useNewUrlParser: true,
18
useUnifiedTopology: true,
19
useCreateIndex: true,
20
useFindAndModify: false,
21
}),
22
},
23
];
24
/src/app.module.ts
JavaScript
1
20
20
1
// Core Packages
2
import { Module } from '@nestjs/common';
3
import { AppController } from './app.controller';
4
import { AppService } from './app.service';
5
6
// NPM Packages
7
8
// Custom Packages
9
import { ConfigModule } from './config/config.module';
10
import { DatabaseModule } from './database/database.module';
11
import { AuthModule } from './auth/auth.module';
12
import { UsersModule } from './users/users.module';
13
14
@Module({
15
imports: [ConfigModule, DatabaseModule, AuthModule, UsersModule],
16
controllers: [AppController],
17
providers: [AppService],
18
})
19
export class AppModule {}
20
/src/auth/auth.module.ts
JavaScript
1
39
39
1
// Core Packages
2
import { Module } from '@nestjs/common';
3
4
// NPM Packages
5
import { PassportModule } from '@nestjs/passport';
6
import { JwtModule } from '@nestjs/jwt';
7
8
// Custom Packages
9
import { AuthService } from './auth.service';
10
import { LocalStrategy } from './local.strategy';
11
import { JwtStrategy } from './jwt.strategy';
12
import { UsersModule } from '../users/users.module';
13
import { jwtConstants } from './constants';
14
import { AuthController } from './auth.controller';
15
import { ConfigService } from 'src/config/config.service';
16
import { ConfigModule } from 'src/config/config.module';
17
import { DatabaseModule } from 'src/database/database.module';
18
19
@Module({
20
imports: [
21
ConfigModule,
22
DatabaseModule,
23
UsersModule,
24
PassportModule,
25
JwtModule.registerAsync({
26
imports: [ConfigModule],
27
useFactory: async (configService: ConfigService) => ({
28
secret: configService.get('JWT_SECRET'),
29
signOptions: { expiresIn: configService.get('JWT_EXPIRE') },
30
}),
31
inject: [ConfigService],
32
}),
33
],
34
providers: [AuthService, LocalStrategy, JwtStrategy],
35
exports: [AuthService],
36
controllers: [AuthController],
37
})
38
export class AuthModule {}
39
/src/users/user.module.ts
JavaScript
1
23
23
1
// Core Packages
2
import { Module } from '@nestjs/common';
3
4
// NPM Packages
5
import { MongooseModule } from '@nestjs/mongoose';
6
7
// Custom Packages
8
import { UsersService } from './users.service';
9
import { UsersController } from './users.controller';
10
import { UserSchema } from './schemas/user.schema';
11
import { DatabaseModule } from 'src/database/database.module';
12
13
@Module({
14
providers: [UsersService],
15
exports: [UsersService],
16
controllers: [UsersController],
17
imports: [
18
DatabaseModule,
19
MongooseModule.forFeature([{ name: 'User', schema: UserSchema }]),
20
],
21
})
22
export class UsersModule {}
23
Advertisement
Answer
Instead of configuring mongoose statically in your database.provider.ts
, you should use the MongooseModule.forRootAsync
import:
JavaScript
1
12
12
1
MongooseModule.forRootAsync({
2
imports: [ConfigModule],
3
useFactory: async (configService: ConfigService) => ({
4
uri: configService.getString('MONGODB_URI'),
5
useNewUrlParser: true,
6
useUnifiedTopology: true,
7
useCreateIndex: true,
8
useFindAndModify: false,
9
}),
10
inject: [ConfigService],
11
});
12