mysql과 mysql2의 차이점
mysql은 MySQL 8.0 버전의 프로토콜에 맞는 인증요청을 보내지 못한다. mysql2는 가능하다.
- cli에서 typeorm 명령어를 사용할 수 있도록
npm install typeorm -g
를 입력한다.- 이미 프로젝트가 설정되어 있는 경우
typeorm init --database mysql2
을 입력하여 ormconfig.json을 생성한다.
{
"compilerOptions": {
"lib": ["es5", "es6", "ES2018"],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist",
"rootDir": "src",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true,
"noEmitOnError": true,
"noUnusedLocals": true
}
}
주의할 점
- tsconfig.json설정이 모두 덮어씌워진다. 그래서 이전에 설정해주는 것은 무의미하다.
esModuleInterop
을true
로 설정해줘야 ES모듈을 사용할 수 있다.- 커맨드창에서는 오류가 생기면 해결법을 추천해주는데 이걸 쓰는 동안 발생한 3개의 오류는 몽고db 문제였다.
- lib에 es2018이상을 쓰라는 reconmmend를 받았다. recommend에 따라 추가를 해서 문제를 해결했다.
옵션
module
은 모듈방식을 정하는 것인데 프론트엔드에서 사용할 때는 ES2015를 사용할 수 있겠지만 백엔드에서는 node에 commonJS모듈이 많아서 commonJS로 사용해준다.- typeorm에 .d.ts 오류가 발생해서 skipLibCheck를 true로 설정함으로써 lib 체킹을 무시했다. 스택오버플로우에서 타입스크립트를 3.6까지 다운그레이드 시키는 방법도 찾았는데 이 방법이 더 간단해서 사용했다.
typeorm을 init하면 ormconfig.json이 생성된다.
typrorm을 연결하기 위한 옵션들을 기입해준다.
보안을 위해서 .gitignore에 ormconfig.json을 작성해준다.
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "1234",
"database": "slimeworld",
"synchronize": true,
"logging": true,
"entities": ["dist/data/**/*.{js,ts}"],
"migrations": ["dist/migration/**/*.{js,ts}"],
"subscribers": ["dist/subscriber/**/*.{js,ts}"]
}
주의할 점
1. mysql 모듈은 오류가 발생하니 mysql2모듈을 다운받아야 하는데 ormconfig.json에서type
에mysql2
를 적으면 안된다!type
은mysql
만 기입할 수 있다.
2. 공식문서 예제에서는entities
가src
로 되어 있는데 ts-node로 바로 실행하면 오류가 없지만 tsc로 변환 후 노드를 실행하는 경우에는 오류가 발생한다. outDir로 정의한 폴더를 기입해준다. 내 경우에는dist
로 바꿔주었다.