본문 바로가기

devLog/daylife

20200914

오늘은 typescript-sequelize로 모델 제작을 이어갔다. 

기존에 작성한 모델들을 구성하는 database/sequeilze.ts를 작성해주었다. 

이때 각 모델을 불러오는 부분들이 전부 에러가 발생했다. 

모델들을 생생해놓고 export를 해주지 않아 생긴 문제로 export를 각 모델들에 추가해줘서 해당 빨간 줄은 지워주었다.

 

하지만 다른 에러가 발생했다. 

이런 에러인데 검색해봐도 해결방법을 찾지 못했다.

그래서 다른 방법으로 변경했다. 

import로 가지고오는 것보다 __dirname을 통해서 모델을 지정해줬다. 

이 방법대로 변경해주니 일단 빨간줄은 없어졌다. 

여기까지 제작한 sequelize-typescript 모델이 관계없이 생성된 상태이기 때문에 이 상태를 따로 복사해 저장했다. 

테스트 코드를 작성해 테스트 할 때 사용할 예정이다. (DB이름만 변경해주었다.)

 

이제 스키마에 맞게 관계를 연결해주려한다. 

먼저 User와 Schedules부터 시작했다. 

 @HasMany(() => Schedule) schedule: Schedule[];

레퍼런스 코드에 적혀있는대로 작성했지만 다시 에러가 발생했다. 

"No overload matches this call."

config 파일작성할 때 모델 기입하면서 발생했던 에러와 같은 에러로 보인다.

 

혹시나 Schedules.ts에 코드를 추가해주지 않아서 발생한 문제는 아닌가 싶어 코드를 추가해주었다.

@ForeignKey(() => User)
@Column user_id!: number;

하지만 여기서도 에러가 발생했다.

"Type 'typeof User' is not assignable to type 'typeof Model'.
Construct signature return types 'User' and 'Model <T, T2>' are incompatible."

 

github.com/sequelize/sequelize/issues/11381

 

Typescript issue with date in where · Issue #11381 · sequelize/sequelize

Issue Description Date types are not accepted as an option in a findAll where. What are you doing? import { Sequelize, Model, DataTypes, BuildOptions } from 'sequelize'; const sequelize = n...

github.com

이 이슈를 참고하여 sequelize의 버전을 변경해주었다. 

기존에 있던 에러들은 사라지고 새로운 에러가 발생했다.

생성자에 선언되지 않았다고 하는 에러로 추정되는데, 보고있는 예제 코드에서는 생성자에 대한 부분이 없어 왜 발생한 에러인지 모르겠다...

위의 다른 코드들처럼 '!'를 추가해주었더니 해결되었다. '!'의 의미가 무엇인지 확인해봐야겠다. 

(구동되는지 확인하고 코드들을 분석하는 시간이 필요하다. @(java의 어노테이션같은데... 뭔지),! 의 의미, 등등.

 

일단 발생하는 문제들을 해결해서 다른 관계들을 전부 이어주었다. 

중간에 Todo table에 parent부분이 서로 다른 두 테이블로부터 받는데, 이 부분을 mile_parent, schedule_parent로 나누어주었다. 

 

그리고 찾아보다가 repository mode라는것을 찾았는데 설명은 이렇다.

"The repository mode makes it possible to separate static operations like find, create, ... from model definitions. It also empowers models so that they can be used with multiple sequelize instances."

모델 정의에서 쿼리가 가능하다는 것 같은데... 사용하면 API 만들 때 편할 것 같아 사용해보기로 했다. (근데 이미 사용으로 바꿔놓았었다...)

사용하기 위해서는 config파일의 (seqeulize.ts) "repositoryMode: true"를 추가해주면 된다.

 

방금 발견한 사실인데 이제까지 테스트용으로 만든 파일에서 assosiation 생성작업을 하고 있었다...

폴더 이름을 바꿔주고 config 파일의 DB이름을 바꿔주는 것으로 해결했다.

 

이제 실행을 시켜 DB가 생성되는지 확인하면 되는데 하는 방법을 찾지 못했다. 

github.com/RobinBuschmann/sequelize-typescript#model-validation

 

RobinBuschmann/sequelize-typescript

Decorators and some other features for sequelize. Contribute to RobinBuschmann/sequelize-typescript development by creating an account on GitHub.

github.com

이 글을 더 확인해보고 있지만 여전히 실행방법을 찾지 못하겠다. 

원래 sequelize는 모델을 만들고 migration 파일을 만든 뒤 migrate 하면 되지만 sequelize-typescript는 어떻게 되는지 확인이 필요하다.

하루는 프로젝트를 진행하기보다 위 글을 번역해봐야겠다. 

(만약 이 sequelzie-typescript로 DB 제작이 계속 늘어지면 DB는 mysql로 그냥 작성하고 row 쿼리 작성한 뒤 express 서버부터 typescript로 진행해야겠다. 만약 이렇게된다면 어느정도 완성한 뒤에 DB를 typescript로 사용할 것 같다.)

 

오늘은 여기까지...

'devLog > daylife' 카테고리의 다른 글

20200918  (0) 2020.09.19
20200911  (0) 2020.09.12
20200910  (0) 2020.09.10
20200909  (0) 2020.09.09