nestjs Using ConfgService with TypeOrmModule

Bru*_*pha 0 nestjs

I set up a ConfigService as described in docs https://docs.nestjs.com/techniques/configuration

how can I use this service with the the TypeOrmModule?

TypeOrmModule.forRoot({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: 'root',
  database: 'test',
  entities: [__dirname + '/**/*.entity{.ts,.js}'],
  synchronize: true,
}),
Run Code Online (Sandbox Code Playgroud)

Kam*_*iec 7

请参阅https://docs.nestjs.com/techniques/database 异步配置章节

import {ConfigService} from './config.service';
import {Module} from '@nestjs/common';
import {TypeOrmModule} from '@nestjs/typeorm';

@Module({
    imports: [
        TypeOrmModule.forRootAsync({
            imports: [ConfigModule],
            useFactory: (config: ConfigService) => config.get('database'),
            inject: [ConfigService],
        }),
    ],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

  • 需要做一些更改才能使其至少对我有用: 1. import { ConfigModule, ConfigService } from '@nestjs/config'; 2. 导入:[ConfigModule.forRoot()], (2认同)

Sal*_*'sa 5

NestJS 10.0.0中,执行此操作的超干净方法如下:

步骤 1. 创建一个.env文件。
# DATABASE
DB_HOST=localhost
DB_PORT=5432
DB_NAME=demo-db
DB_USERNAME=postgres
DB_PASSWORD=example
Run Code Online (Sandbox Code Playgroud)
步骤 2. 使用 注册您的数据库配置registerAs
// config/database.config.ts

import { registerAs } from '@nestjs/config';
import { TypeOrmModuleOptions } from '@nestjs/typeorm';

export default registerAs(
  'database',
  (): TypeOrmModuleOptions => ({
    type: 'postgres',
    host: process.env.DB_HOST,
    port: +process.env.DB_PORT,
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    autoLoadEntities: true,
    synchronize: true,
  }),
);

Run Code Online (Sandbox Code Playgroud)
步骤 3:然后将其加载databaseConfig到 main 中app.module.ts,如下所示:
// app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import databaseConfig from './config/database.config';

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forRoot(databaseConfig()),
  ],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

Run Code Online (Sandbox Code Playgroud)
就这样!

此外,如果您希望database在模块服务之一中访问此配置,您可以按如下方式进行:

// app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({ load: [databaseConfig] }),
    TypeOrmModule.forRoot(databaseConfig()),
    ...
  ],
  ...
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
// [feature].module.ts

@Module({
  imports: [ConfigModule],
  controllers: [FeatureController],
  providers: [FeatureService],
})
export class FeatureModule {}
Run Code Online (Sandbox Code Playgroud)
// feature.service.ts

@Injectable()
export class FeatureService {
  constructor(private configService: ConfigService) {}

  printConfiguration() {
    console.log(this.configService.get('database'));
  }
}
Run Code Online (Sandbox Code Playgroud)