ルート ディレクトリに .env 、.env.test、.env.prod の 3 つの env ファイルを作成しました。
.env ファイルには
PORT=4000
DATABASE_URL="postgresql://postgres:1234@localhost:5432/postgres?schema=public"
JWT_SECRET="THIS_IS_A_SECRET_KEY_DEV_ENVIRONMENT"
JWT_EXPIRATION_TIME=3600
そして、私の .env.test には
PORT=4001
DATABASE_URL="postgresql://postgres:1234@localhost:5432/postgres?schema=public"
JWT_SECRET="THIS_IS_A_SECRET_KEY_TEST_ENVIRONMENT"
JWT_EXPIRATION_TIME=2400
私の app.moudle.ts は次のようになります
const ENV = process.env.NODE_ENV;
console.log(ENV);
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: !ENV ? '.env' : `.env.${ENV}`,
load: [configuration],
ignoreEnvFile: true,
}),
providers: [AppService],
controllers: [AppController],
})
export class AppModule {
constructor(private connection: Connection) {}
}
configuration.ts :
export default () => ({
port: parseInt(process.env.PORT, 10) || 3000,
jwt:{
secret:process.env.JWT_SECRET,
expiresIn:process.env.JWT_EXPIRATION_TIME
}
});
そして私のスクリプトは次のとおりです。
"start:dev": "nest build && nest start --watch",
"start:test": "NODE_ENV=test nest start --watch",
コントローラーコード:
Logger.log(this.configService.get<string>('jwt.secret'));
任意のコントローラーに conifgService を挿入し、jwt キーをログに記録しようとすると、常に.envファイルからキーがフェッチされます。スクリプト「start:test」を使用してアプリを実行した場合でも
スクリプト/環境に関係なく、常に.envファイルから値を取得しますすべてのスクリプトについてこれをログに記録します「THIS_IS_A_SECRET_KEY_DEV_ENVIRONMENT」