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

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

작성한 질문수

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

typeorm seeding, migration

seeder is not a constructor

작성

·

707

0

yarn seed를 통해 더미데이터를 생성하려 했으나 "seeder is not a constructor" 라는 에러에 마주칩니다.

 

어느 부분이 잘못됫는지 알아보기 위해 에러코드를 살펴봤으나 제 코드 부분이 아닌 typeorm-extension 부분에서 에러가 나는것 같아 해결하기 어렵습니다.

TypeError: seeder is not a constructor
    at /Users/jinyoung/Desktop/try-own-version/practice-version/node_modules/typeorm-extension/src/seeder/module.ts:122:19
    at Generator.next (<anonymous>)
    at fulfilled (/Users/jinyoung/Desktop/try-own-version/practice-version/node_modules/typeorm-extension/dist/seeder/module.js:5:58)

 

dataSource.ts
import dotenv from 'dotenv';
//dataSource에 entity를 입력해줄때는 절대경로면 못찾아온다. 그래서 상대 경로로 써줘야함
import { User } from './src/users/entities/user.entity';
import { DataSource } from 'typeorm';

const mode = process.env.NODE_ENV || 'development';
dotenv.config({ path: process.cwd() + `/.env.${mode}` });

const dataSource = new DataSource({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  database: process.env.DB_DATABASE,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  charset: 'utf8mb4_general_ci',
  entities: [User],
  migrations: [__dirname + '/src/migrations/*.ts'],
  synchronize: true,
  logging: true,
});
export default dataSource;

 

package.json seed부분 설정
"seed": "ts-node ./node_modules/typeorm-extension/dist/cli/index.js seed -d ./dataSource.ts"

 

database/seeds/create-initial-data.ts

import { User } from '../../users/entities/user.entity';
import { DataSource } from 'typeorm';
import { Seeder, SeederFactoryManager } from 'typeorm-extension';

export class UserSeeder implements Seeder {
  async run(
    dataSource: DataSource,
    factoryManager: SeederFactoryManager,
  ): Promise<any> {
    const userRepository = dataSource.getRepository(User);

    await userRepository.save({
      email: 'ggg@gmail.com',
      firstName: 'sfvs',
      lastName: 'wdwdwd',
      nickname: 'hihi',
    });
  }
}

 

typeorm-extension 버젼
"typeorm-extension": "^2.4.2",
"typeorm": "^0.3.12",

 

시도해본 내용
1. dataSource 생성시 new DataSource({

... 중략
seed:["create-initial-data.ts 경로"] 추가

})

2. db 삭제후 다시 생성(생성시 테이블 싱크까지 맞춘후 seed 시도)

3. typeorm-extension 버전 문제일까 해서 다운그레이드 시도

4. typeorm 0.3대는 유지하고 0.3.11, 0.3.10등 다른 버전으로 시도

결과 모두 실패

답변 2

0

헤메시는 분들 있을까봐 댓글 남깁니다.

해당 에러는 default가 빠져서 발생하는 오류입니다.

질문자님 코드 기준으로

database/seeds/create-initial-data.ts 에서

export default class UserSeeder implements Seeder {

로 수정하면 해당 에러는 사라질것 같네요.

0.2와 0.3 사이에 바뀐게 많아서 혼란스러운 부분이 많네요.

다들 화이팅입니다!

0

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

seeds: ['src/database/seeds/**/*{.ts,.js}'],

이렇게 해보셨나요? 파일도 저 경로가 맞죠??

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

작성한 질문수

질문하기