I have created a DatabaseModule using the nestjs typeorm
import { createConnection } from 'typeorm';
import { ConfigService } from '@nestjs/config';
export const databaseConnection = [
{
provide: 'DATABASE_CONNECTION',
useFactory: async (configService: ConfigService) => await createConnection({
type: configService.get('DBTYPE'),
host: configService.get('DBHOST'),
port: configService.get('DBPORT'),
username: configService.get('DBUSERNAME'),
password: configService.get('DBPASSWORD'),
database: configService.get('DBNAME'),
synchronize: true,
entities: [
__dirname + '/../**/*.entity.ts'
]
})
}
];
While starting the rest service I am getting the following error
Cannot read property 'get' of undefined - {"stack":["TypeError: Cannot read property 'get' of undefined
at InstanceWrapper.useFactory [as metatype] (../database/database.provider.js:9:33)
at Injector.instantiateClass (../node_modules/@nestjs/core/injector/injector.js:293:55)
at callback (../node_modules/@nestjs/core/injector/injector.js:77:41)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)"]}
I have imported the ConfigModule
inside DatabaseModule
.
Can someone help me out with this?
EDIT
My database config
import { registerAs } from '@nestjs/config';
// Configuration factory class for database configuration.
const DatabaseConfig = registerAs('DBConfig', () => ({
DBTYPE: process.env.DATABASE_TYPE,
DBHOST: process.env.DATABASE_HOST || 'localhost',
DBPORT: process.env.DATABASE_PORT || 5432,
DBUSERNAME: process.env.DATABASE_USERNAME,
DBPASSWORD: process.env.DATABASE_PASSWORD,
DBNAME: process.env.DATABASE_NAME
}));
In app.module.ts imports
ConfigModule.forRoot({
isGlobal: true,
expandVariables: true,
load: [AppConfig, DatabaseConfig]
}),
If the
ConfigService
comes from a global module, you need to addinject
into the async configuration, like so:Since you are using a config.namespace you have invoke it like
DBConfig.DBTYPE
.If the
ConfigService
does not come from a global module, you need to add bothinject: [ConfigService]
andimports: [ConfigModule]
.