必要なライブラリのインストール
shell
npm i --save @nestjs/config
configuration.ts を作成
shell
mkdir -p src/config
touch src/config/configration.ts
configuration.ts
を以下のように編集します。
src/config/configration.ts
export default () => ({
app: {
port: parseInt(process.env.APP_PORT, 10) || 3000,
},
database: {
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: parseInt(process.env.TYPEORM_PORT, 10) || 5432,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
synchronize: process.env.TYPEORM_SYNCHRONIZE === 'true',
},
});
.env ファイルを作成する
.env
ファイルを作成します。作成した .env
は自動で読み込まれます。
.env
# App Configration
APP_PORT=3000
# Database ORM configuration
TYPEORM_CONNECTION=mysql
TYPEORM_HOST=localhost
TYPEORM_PORT=3306
TYPEORM_USERNAME=nestjs
TYPEORM_PASSWORD=password
TYPEORM_DATABASE=nestjs
TYPEORM_SYNCHRONIZE=false
# TypeORM internals
TYPEORM_ENTITIES=src/**/*.entity.ts,dist/**/*.entity.js
TYPEORM_MIGRATIONS_DIR=src/migrations
TYPEORM_MIGRATIONS=src/migrations/*.ts
app.module.ts で ConfigModule の依存関係を定義する
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import configration from './config/configration';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [configration],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
環境変数が読み込まれていることを確認する
main.ts
で console
に環境変数の値を表示してみます。
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const configService = app.get(ConfigService);
const appPort = configService.get<number>('app.port');
await app.listen(appPort);
console.log(`App is running on: ${await app.getUrl()}`);
}
bootstrap();
取得したい値は configService.get('app.port')
のようにして取得できます。
const appPort = configService.get<number>('app.port');
のように、型を設定することもできます。
'app.port'
のところに書いた文字列は、 configuration.ts
で作成したオブジェクトの形に沿っています。database.type
, database.username
のようにすれば、その他の値も取得できます。
なお、デフォルトのプロジェクト設定だと、 NestJS は .env
を .gitignore
に登録していないので、忘れずに追加しておきましょう。
shell
echo ".env" >> .gitignore