관리 메뉴

Mini

[Nest] typeorm 설정, 모듈생성, 의존성주입, No metadata for "PostsModel" was found 문제해결 본문

JS/Nest.js

[Nest] typeorm 설정, 모듈생성, 의존성주입, No metadata for "PostsModel" was found 문제해결

Mini_96 2024. 9. 17. 21:11
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from './users/users.module';
import { TypeOrmModule } from "@nestjs/typeorm";

@Module({
  imports: [
    UsersModule,
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'postgres',
      database: 'postgres',
      entities: [], //생성할 모델들
      synchronize: true, //typeorm 코드와 db싱크를 맞출건지 (개발에서만 써라)
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

결과

* No metadata for "PostsModel" was found 문제해결

  • 문제 : @Entitiy()를 한후 저장해도 테이블이 안생김
  • 해결 : app.모듈 > 엔티티에 추가
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity() //테이블생성해줘
export class PostsModel {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  author: string;

  @Column()
  title: string;

  @Column()
  content: string;

  @Column()
  likeCount: number;

  @Column()
  commentCount: number;
}

이후 app.module > entites에 넣어줘야 작동함!
결과

* 의존성주입 하는법

  • 모듈에서 import
  • import하면 DI Container에 올라가는듯
import { Module } from '@nestjs/common';
import { PostsService } from './posts.service';
import { PostsController } from './posts.controller';
import { TypeOrmModule } from "@nestjs/typeorm";
import { PostsModel } from "./entities/posts.entity";

@Module({
  imports:[
    TypeOrmModule.forFeature([
      PostsModel
    ]),
  ],
  controllers: [PostsController],
  providers: [PostsService],
})
export class PostsModule {}
  • 서비스의 생성자에서 매개변수 선언 (생성자 주입)
@Injectable()
export class PostsService {
  constructor(
    @InjectRepository(PostsModel)
    private readonly postsRepository: Repository<PostsModel>) {
  }