【nest】nest+typeorm导入env写法

前言

  • 以前文章里也能导入env但不是常规写法,经过研究后发现了比较优雅的写法。

原理

  • nest官方提供的@nest/config确实让我们方便注入env的,但是我用法不太对,比如一开始的typeorm需要连接数据库,前面文章里直接forroot然后默认就走的ormconfig去连接编译后的文件,虽然效果也行,但用用别的方法也挺有趣的。
  • 连接编译后的文件我还遇到个大坑,差点把我吓死,还好失败回滚了。就是ts实体编译后,然后我改变实体名,或者删掉实体,我本意就是不想让typeorm去操作那个实体,然后我开着同步,结果dist下的实体没删掉,依然跑去按实体上定义去删表,还好当时又有备份且又因为实体上有个类型和表上类型不一致导致失败回滚。
  • 但是后来研究发现,在ts中导入的路径一样是使用编译后的实体,貌似typeorm不能解析编译前的实体,所以是否同步需要谨慎使用。

设置

  • 直接启个项目,需要安装的那些就不用说了。
  • 为了让typeorm不拿ormconfig的配置,我们需要使用typeormmodule的forRootAsync导入官方的config模块注入env参数。
  • 制作个config.ts:
export default () => ({
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  database: process.env.DB_DATABASE,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  logging: JSON.parse(process.env.DB_LOGGING), //生产模式关闭
  sync: JSON.parse(process.env.DB_SYNC), //生产模式必须关闭
});
  • env就直接写上对应的即可。
  • appmodule下载入官方提供config并使用import和inject注入useFactory中,让typeorm拿到env参数:
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import configuration from './config';

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [configuration],
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (config: ConfigService) => {
        return {
          type: 'mysql',
          host: config.get('DB_HOST'),
          port: config.get('DB_PORT'),
          database: config.get('DB_DATABASE'),
          username: config.get('DB_USERNAME'),
          password: config.get('DB_PASSWORD'),
          logging: config.get('DB_LOGGING'),
          synchronize: config.get('DB_SYNC'),
          entities: [__dirname + '/**/*.entity{.ts,.js}'], //这个实体是编译后的dist下
          timezone: '+08:00',
        };
      },
      inject: [ConfigService],
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

业火之理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值