인프런 커뮤니티 질문&답변

양진영님의 프로필 이미지
양진영

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

typeorm seeding, migration

dataSource내부 환경변수 인식 불가에 따른 db연결 실패

작성

·

515

·

수정됨

0

dataSource.ts
import { DataSource } from 'typeorm';

import { ChannelChats } from './src/entities/channelChat.entity';
import { ChannelMembers } from './src/entities/channelMembers.entity';
import { Channels } from './src/entities/channel.entity';
import { DMs } from './src/entities/dm.entity';
import { Mentions } from './src/entities/mention.entity';
import { Users } from './src/entities/user.entity';
import { WorkspaceMembers } from './src/entities/workspaceMembers.entity';
import { Workspaces } from './src/entities/workspace.entity';
import { ConfigService } from '@nestjs/config';

const configService = new ConfigService();

const test = configService.get('DB_HOST');
console.log(test)
const dataSource = new DataSource({
  type: 'mysql',
  host: '127.0.0.1',
  port: 3306,
  username: configService.get('DB_USER'),
  password: configService.get('DB_PASSWORD'),
  database: configService.get('DB_NAME'),
  entities: [
    ChannelChats,
    ChannelMembers,
    Channels,
    DMs,
    Mentions,
    Users,
    WorkspaceMembers,
    Workspaces,
  ],
  migrations: [__dirname + '/src/migrations/*.ts'],
  synchronize: false,
  logging: true,
});
출력 에러 로그

yarn seed
yarn run v1.22.19
warning ../../../../package.json: No license field
$ ts-node ./node_modules/typeorm-extension/dist/cli/index.js seed -d ./dataSource.ts
undefined !!!!!!!!!!!!!!!
Error during Data Source initialization Error: Access denied for user ''@'localhost' (using password: NO)
    at Packet.asError (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/packets/packet.js:728:17)
    at ClientHandshake.execute (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/commands/command.js:29:26)
    at PoolConnection.handlePacket (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/connection.js:478:34)
    at PacketParser.onPacket (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/connection.js:97:12)
    at PacketParser.executeStart (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/packet_parser.js:75:16)
    at Socket.<anonymous> (/Users/jinyoung/Desktop/study/nest/nest-project/node_modules/mysql2/lib/connection.js:104:25)
    at Socket.emit (node:events:513:28)
    at Socket.emit (node:domain:489:12)
    at addChunk (node:internal/streams/readable:324:12)
    at readableAddChunk (node:internal/streams/readable:297:9) {
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000',
  sqlMessage: "Access denied for user ''@'localhost' (using password: NO)",
  sql: undefined
}
typeorm-extension seed
.env
NAME=development
DB_HOST=localhost
DB_NAME=nestdb
DB_USER=root
DB_PASSWORD=password!!!
package.json
"db:create": "ts-node ./node_modules/typeorm-extension/dist/cli/index.js db:create -d ./dataSource.ts",
    "db:drop": "ts-node ./node_modules/typeorm-extension/dist/cli/index.js db:drop -d ./dataSource.ts",
    "seed": "ts-node ./node_modules/typeorm-extension/dist/cli/index.js seed -d ./dataSource.ts",
    "schema:drop": "ts-node ./node_modules/typeorm/cli.js schema:drop",
    "schema:sync": "ts-node ./node_modules/typeorm/cli.js schema:sync",
    "db:migrate": "npm run typeorm migration:run -- -d ./dataSource.ts",
    "db:migrate:revert": "npm run typeorm migration:revert -- -d ./dataSource.ts",
    "db:create-migration": "npm run typeorm migration:create -- ./src/migrations/",
    "db:generate-migration": "npm run typeorm migration:generate -- ./src/migrations -d ./dataSource.ts"
폴더구조

- node_module
- src
- .env
- dataSource.ts
- package.json

 

출력에러 로그에 보시면 맨위 yarn seed 기준 5번째 줄에 undefined !!!!!! 이런 로그를 확인하실수 있으실텐대 이게 process.env.DB_NAME을 해도 이렇게 나오고 configService.get('DB_NAME')을 해도 undefined로 나오는걸로 확인해본결과 현재 환경변수가 인지가 되지않는 상태라는것을 알아챈 상태까지 왔습니다. 여기서 어떤 부분을 손보면 좋을지 궁금합니다.

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

@nestjs/config 쓰지마시고 dotenv 모듈 사용하세요

양진영님의 프로필 이미지
양진영
질문자

잘해결되어 감사합니다. 하지만 이해가 가진않습니다. 물론 dotenv모듈을 사용해서 환경변수 인식이 되긴했지만 new ConfigService() 해서 인스터스 생성한걸로 환경변수 사용할수있을줄 알았는데 어째서 사용할수 없었던걸까요??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네스트의 모듈인데 독립적으로 사용하셔서 그렇습니다

양진영님의 프로필 이미지
양진영

작성한 질문수

질문하기