방명록
- [Nest.js] 여러 환경 변수 설정 및 오류 해결2024년 11월 14일 11시 00분 51초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 여러 환경 변수 설정
Nest.js에서 .env 뿐만 아니라 .env.local도 사용하고자 하였다. 기존 프로젝트에서는 .env만 사용하고 있었고 MySQL과 TypeOrm을 사용하고 있었다. Nest.js에서 여러 .env 설정 방법은 아래와 같다.
1-1. cross-env 패키지 설치
npm install cross-env npm install @nestjs/config dotenv
1-2. package.json 스크립트 수정
"scripts": { "start:local": "cross-env NODE_ENV=local nest start --watch", }
1-3. app.module.ts에 아래 코드 추가
import * as dotenv from 'dotenv'; // 명령어에 따라 환경 변수 파일 로드 if (process.env.NODE_ENV === 'local') { console.log('.env.local'); dotenv.config({ path: '.env.local' }); } else { dotenv.config(); }
1-4. 프로젝트 실행
npm run start:local
2. 오류 해결
2-1. MySQL 서버 인증 모드 오류
[TypeOrmModule] Unable to connect to the database. Retrying (1)... Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
MySQL 서버의 인증 모드가 mysql_native_password 대신 caching_sha2_password로 설정되어 있을 때 자주 발생한다. 이 문제를 해결하려면 MySQL 사용자 계정의 인증 모드를 mysql_native_password로 변경하거나, 클라이언트 드라이버를 업그레이드하여 최신 인증 방식을 지원하도록 해야 한다. 나의 경우 클라이언트 드라이버를 mysql에서 mysql2로 업그레이드하여 해결하였다(기존 mysql은 uninstall 진행).
npm install mysql2@latest npm uninstall mysql
2-2. 타임존 설정 오류
Ignoring invalid timezone passed to Connection: UTC. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection
mysql2에서는 타임존 'UTC'의 경우 'Z' 또는 '+00:00'으로 설정해야한다. 따라서 기존 'UTC'에서 'Z'로 변경하여 해결하였다.
TypeOrmModule.forRoot({ type: 'mysql', host: process.env.DB_HOST, port: 3306, username: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, timezone: 'Z', // 또는 '+00:00' // ... other options });
728x90반응형'언어·프레임워크 > NestJS' 카테고리의 다른 글
[NestJS] Postman에서 이미지 업로드 테스트, 왜 400?! (0) 2023.11.02 [NestJS] 코드에 생긴 빨간 줄 해결(.eslintrc.js) (0) 2023.05.28 다음글이 없습니다.이전글이 없습니다.댓글