如何在Nestjs DatabaseModule

问题描述

我已经使用nestjs typeorm

创建了DatabaseModule
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'
            ]
        })
    }
];

启动剩余服务时,出现以下错误

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)"]}

我已经将ConfigModule导入了DatabaseModule内。

有人可以帮我吗?

编辑

我的数据库配置

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
}));

在app.module.ts导入中

ConfigModule.forRoot({
        isGlobal: true,expandVariables: true,load: [AppConfig,DatabaseConfig]
}),

解决方法

如果ConfigService来自全局模块,则需要将inject添加到异步配置中,如下所示:

由于使用的是config.namespace,因此您像DBConfig.DBTYPE这样调用它。

export const databaseConnection = [
    {
        provide: 'DATABASE_CONNECTION',inject: [ConfigService],useFactory: async (configService: ConfigService) => await createConnection({
            type: configService.get('DBConfig.DBTYPE'),host: configService.get('DBConfig.DBHOST'),port: configService.get('DBConfig.DBPORT'),username: configService.get('DBConfig.DBUSERNAME'),password: configService.get('DBConfig.DBPASSWORD'),database: configService.get('DBConfig.DBNAME'),synchronize: true,entities: [
                __dirname + '/../**/*.entity.ts'
            ]
        })
    }
];

如果ConfigService不是来自全局模块,则需要同时添加 inject: [ConfigService]imports: [ConfigModule]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...