본문 바로가기
Log/Trouble shoot

nestjs_EntityMetadataNotFoundError 에러

by RIEM 2023. 2. 22.
728x90

문제

Screen Shot 2023-02-22 at 12 26 16 AM

EntityMetadataNotFoundError: No metadata for "ProductEntity" was found.
    at DataSource.getMetadata (/Users/thursdaycurry/Desktop/git-thursdaycurry/project/1.stockls/stockls/src/data-source/DataSource.ts:438:30)
    at Repository.get metadata [as metadata] 
    ...

ProductEntity, DataSource 키워드를 보니 왠지 DB 문제인거 같았다.

원인

이전에 .env로 환경변수를 관리하다 src/config/orm.config.ts에 DB config를 따로 빼준 상황이었는데, 옮기는 과정에서 process.env 방식에서 configService.get() 형식으로 수정해주지 않았던 것이 문제의 원인이었다. 이로 인해 nest.js가 DB 환경변수를 제대로 읽지 못하고 있는 상황이었다.

해결

환경변수를 옮기면서 process.env 에서 configService.get()으로 바꿔주었다.

수정 전

import { ConfigModule, ConfigService } from '@nestjs/config';
import {
  TypeOrmModuleAsyncOptions,
  TypeOrmModuleOptions,
} from '@nestjs/typeorm';

export default class TypeOrmConfig {
  static getOrmConfig(configService: ConfigService): TypeOrmModuleOptions {
    return {
      type: 'postgres',
      host: process.env.DB_HOST,
      port: 5432,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_TITLE,
      entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      synchronize: true,
...

수정 후

import { ConfigModule, ConfigService } from '@nestjs/config';
import {
  TypeOrmModuleAsyncOptions,
  TypeOrmModuleOptions,
} from '@nestjs/typeorm';

export default class TypeOrmConfig {
  static getOrmConfig(configService: ConfigService): TypeOrmModuleOptions {
    return {
      type: 'postgres',
      host: configService.get('DB_HOST'),
      port: 5432,
      username: configService.get('DB_USERNAME'),
      password: configService.get('DB_PASSWORD'),
      database: configService.get('DB_TITLE'),
      entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      synchronize: true,
...
728x90

댓글