Environment variables 无法读取ts文件中的env文件

Environment variables 无法读取ts文件中的env文件,environment-variables,nestjs,Environment Variables,Nestjs,我编写了以下代码: app.module.ts const dotenv = require('dotenv'); dotenv.config(); @Module({ imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({ migrations: [migrationPath], entities: [Users], }),AuthModule], controllers:

我编写了以下代码:

app.module.ts

const dotenv = require('dotenv');

dotenv.config();

@Module({
  imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
    migrations: [migrationPath],
    entities: [Users],
  }),AuthModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@Module({  
  imports: [    
      ConfigModule.forRoot(), 

      JwtModule.register({
          secret: process.env.SECRETKEY,
           signOptions: {
              expiresIn:process.env.EXPIRESIN,
          },
      }),
  ], 

})
export class AuthModule {}
我删除了数据库连接,因为它与问题无关,但它就在那里

auth.module.ts

const dotenv = require('dotenv');

dotenv.config();

@Module({
  imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
    migrations: [migrationPath],
    entities: [Users],
  }),AuthModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@Module({  
  imports: [    
      ConfigModule.forRoot(), 

      JwtModule.register({
          secret: process.env.SECRETKEY,
           signOptions: {
              expiresIn:process.env.EXPIRESIN,
          },
      }),
  ], 

})
export class AuthModule {}
我的系统没有读取
SECRETKEY
的值,我在网上尝试了许多解决方案,但没有一个有效。 相反,我得到的是
无法连接到数据库错误

PS:我刚才在问题中省略了db配置,但是在代码中,它们在那里并且工作正常,只是当我在
auth.module.ts
中添加
ConfigModule.forRoot()
代码时才会出现问题

const dotenv = require('dotenv');

dotenv.config();

@Module({
  imports: [ConfigModule.forRoot({isGlobal: true}),TypeOrmModule.forRoot({
    migrations: [migrationPath],
    entities: [Users],
  }),AuthModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
@Module({  
  imports: [    
      ConfigModule.forRoot(), 

      JwtModule.register({
          secret: process.env.SECRETKEY,
           signOptions: {
              expiresIn:process.env.EXPIRESIN,
          },
      }),
  ], 

})
export class AuthModule {}
ConfigModule.forRoot()
将使
env
变量仅在功能模块(AuthModule)中可用

通常,
ConfigModule.forRoot()
只在
AppModule
调用一次,其他模块只导入它,例如:

@模块({
进口:[
配置模块,
JwtModule.register({
秘密:process.env.SECRETKEY,
标志选项:{
expiresIn:process.env.expiresIn,
},
}),
], 
})
您已经通过使用
isGlobal:true
导入
ConfigModule
使env变量全局可用,因此不需要在
AuthModule
中导入
ConfigModule

检查这里的文件-

注意:


ConfigModule
已经在内部使用了
dotenv
,因此您不需要在
AppModule
中使用
dotenv
AuthModule
中删除
ConfigModule.forRoot()

ConfigModule.forRoot()
将使
env
变量仅在功能模块(AuthModule)中可用

通常,
ConfigModule.forRoot()
只在
AppModule
调用一次,其他模块只导入它,例如:

@模块({
进口:[
配置模块,
JwtModule.register({
秘密:process.env.SECRETKEY,
标志选项:{
expiresIn:process.env.expiresIn,
},
}),
], 
})
您已经通过使用
isGlobal:true
导入
ConfigModule
使env变量全局可用,因此不需要在
AuthModule
中导入
ConfigModule

检查这里的文件-

注意:


ConfigModule
已经在内部使用了
dotenv
,因此您不需要在
AppModule
中使用
dotenv
我的工作示例auth.module.ts:

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { PassportModule } from '@nestjs/passport';
import { AuthController } from './auth.controller';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
import { JwtStrategy } from './jwt.strategy';
import { UserModule } from '../entities/user/user.module';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports:[
    PassportModule.register({ defaultStrategy: 'jwt' }),
    UserModule,
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        secret: configService.get<string>('SECRET_KEY'),
        expiresIn: configService.get<number>('EXPIRES_IN')
      }),
      inject: [ConfigService],
    }),
  ],
  controllers: [
    AuthController
  ],
  providers: [
    AuthService,
    LocalStrategy,
    JwtStrategy,
    ConfigService
  ],
  exports: [
    AuthService
  ],
})
export class AuthModule {}

我的工作示例auth.module.ts:

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LocalStrategy } from './local.strategy';
import { PassportModule } from '@nestjs/passport';
import { AuthController } from './auth.controller';
import { JwtModule } from '@nestjs/jwt';
import { jwtConstants } from './constants';
import { JwtStrategy } from './jwt.strategy';
import { UserModule } from '../entities/user/user.module';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports:[
    PassportModule.register({ defaultStrategy: 'jwt' }),
    UserModule,
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        secret: configService.get<string>('SECRET_KEY'),
        expiresIn: configService.get<number>('EXPIRES_IN')
      }),
      inject: [ConfigService],
    }),
  ],
  controllers: [
    AuthController
  ],
  providers: [
    AuthService,
    LocalStrategy,
    JwtStrategy,
    ConfigService
  ],
  exports: [
    AuthService
  ],
})
export class AuthModule {}

如果使用dotenv,为什么还要再次使用ConfigModule?如果使用dotenv,为什么还要再次使用ConfigModule?我尝试了这种方法。现在它没有显示错误,但我仍然无法获取值。如果您能帮助我使用dotenv读取值,也许可以?如果dotenv仍在使用,您可以删除所有ConfigModule导入:)我尝试了这种方法。现在它没有显示错误,但我仍然无法获取值。如果您能帮助我使用dotenv读取值,也许可以?如果dotenv仍在使用,您可以删除所有ConfigModule导入:)