const dotenv = require('dotenv');
dotenv.config();
// 모든 모델(테이블)에 적용할 옵션 작성
// 모든 모델(테이블)에 공통 반영된다
const common = {
charset: 'utf8mb4', // utf8 + 이모티콘
collate: 'utf8mb4_general_ci', // utf8 + 이모티콘 getneral 또는 unicode 적용
logging: true,
// query: {
// raw: true, // ! 이 옵션 넣으면 result.get에러 발생! 넣지말기^^
// },
underscored: true,
dialectOptions: {
useUTC: true, //for reading from database
dateStrings: true, // ! 데이터 로드시 문자열로 가저옴
typeCast: true, // ! 타임존을 역으로 계산하지 않음
},
timezone: '+09:00', //for writing to database
};
module.exports = {
development: {
username: process.env.DB_USER,
password: process.env.DB_PW,
database: process.env.DB_NAME,
host: 'localhost',
dialect: 'mysql',
...common,
},
test: {
username: process.env.DB_USER,
password: process.env.DB_PW,
database: process.env.DB_NAME,
host: 'localhost',
dialect: 'mysql',
...common,
},
production: {
username: process.env.DB_USER,
password: process.env.DB_PW,
database: process.env.DB_NAME,
host: 'localhost',
dialect: 'mysql',
...common,
},
};
const common = {
charset: 'utf8mb4', // utf8 + 이모티콘
collate: 'utf8mb4_general_ci', // utf8 + 이모티콘 getneral 또는 unicode 적용
logging: true,
// query: {
// raw: true, // ! 이 옵션 넣으면 result.get에러 발생! 넣지말기^^
// },
underscored: true,
dialectOptions: {
useUTC: true, // for reading from database
dateStrings: true, // ! 데이터 로드시 문자열로 가저옴
typeCast: true, // ! 타임존을 역으로 계산하지 않음
},
timezone: '+09:00', //for writing to database
};
참고 사이트 : 시퀄라이즈 타임존 설정하기
dialectOptions
, timezone
를 보면 된다.timezone
옵션에 +9
설정gnoring invalid configuration option passed to Connection: useUTC. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection
라고 콘솔에 출력된다.charset
설정내가 사용한 데이터베이스 MySQL을 기준으로, DB에 한글을 담기 위해서는 utf8
설정이 필요하다. 사용자 이름을 담는 필드라면 utf8
만으로 충분하지만, 본문을 담은 필드라면 이모지를 담을수 있는 utf8mb4
설정을 해주어야 한다.
callate
옵션 또한 동일한 옵션을 적용하며 general
or unicode
중 선택하여 적용한다. unicode
옵션이 더 넓은 범위라고하니 너의 선택!
참고 사이트 : general_ci & unicode_ci의 차이점
Query : { raw : true }
...처음 타임존을 설정하면서 포스팅쓴 엉아가 설정한 옵션을 cmd +C & cmd +V
로 고스란히 옴겨서 사용했다. 하하하! 모델링 다 하고 api 만들다 보니 Include에서 문제가 발생한다.
result.get is not a function..
raw:true, nest:true
추가로 가까스로 해결Feed.hasMany(Image)
일 때, Image
가 배열에 담겨 반환되야 하는데, raw:true
옵션 덕분에 단일 객체가 되고, 여러장 이미지 결과로 나온다면, 각각 1개씩 여러게에 나뉘어 중복 출력되버림!raw:true
를 제거해야 한다, id 필드를 새로 만들어라 뭐라.. 말이 많음raw:true
를 제거해라 -> 처음 문제 1로 되 돌아감id
필드를 새로 만들어라 -> 별반응 없음query: {raw:ture}
설정을 추가해라 -> 이미 추가되어 있는데?query: {raw:ture}
글로벌 설정 까지 제거하고 시도했더니 정상 출력되었다.느낀 점 : 모르는 코드는 넣는 것이 아니다..!
query: {raw:ture}
이 한줄이 하는 기능도 모른체 일딴 넣고 본 내 잘못으로.. 몇 일 날렸네..
findAll, findOne같은 파인더를 사용할 때 반환값 설정을 할 수 있다. 다음과 같은 옵션이 있으니 참고하자! (이번에 내가 사용해보고 문제가 있었던 것들만 정리!)
plain: true
: 결과값의 배열을 단순화 하여 리턴 ex : images : [object,object] => images : Array
raw: true
: 시퀄라이즈 설정에서 query:{raw:true}
했을 경우 이 옵션을 꼭 넣어줘야 result.get 에러가 안난다. 이 옵션은 리턴 값을 단일 객체로 변형하여 보여준다. 문제는 hasMany의 배열값도 객체로 단일화 해버린다는 것!nest : true
: 객체를 계층화 하여 보여준다. raw 옵션과는 항상 쌍으로 다닌다. 설정안하면... 'Images.Feed.id' : 값
이런식으로 문자열로 키가 보여줌.