늘보블로그
prettier 사용 시 화살표 함수 에러 본문
『node.js 교과서』의 코드를 따라 치던 중 sequelize 쪽에서 에러가 터졌다.
Error: user.hasMany called with something that's not a subclass of Sequelize.Model
에러가 터진 부분의 코드는 user 테이블과 post 테이블을 1:N 관계로 정의하는 코드였다.
db.User.hasMany(db.Post);
처음에는 뭣도 모르고 prettier가 괄호를 생략해버려서 생기는 에러라고 생각했는데, 두 테이블의 modeling 파일을 살펴보니 내가 화살표 함수를 잘못 사용한 게 문제였다. 공부를 하면 할수록 코드는 무죄, 사용자가 유죄라는 걸 느낀다. 따라서 화살표 함수의 사용법을 되짚어보려 한다.
화살표 함수는 기존의 function 예약어 대신 => 예약어를 사용해 함수를 정의하는 ES6의 문법이다. 기존의 함수 정의 방식과 차이가 있지만 여기서는 문제가 됐던 함수 정의 방식만을 확인한다.
화살표 함수를 사용해서 함수의 실행부를 작성할 경우 기본적으로는 기존의 function과 마찬가지로 중괄호{}를 사용한다. 이때 실행부가 만약 한 줄의 코드라면 중괄호를 생략할 수 있고 return도 암묵적으로 실행되므로 생략한다.
// 두 코드는 동일한 결과를 반환한다.
x => { return x * x }
x => x * x
또 객체를 return할 경우 중괄호 대신 소괄호()를 사용하고 이때도 마찬가지로 return을 생략한다.
// 두 코드는 동일한 결과를 반환한다.
() => { return { a: 1 }; }
() => ({ a: 1 })
객체를 return해서 소괄호로 함수의 실행부를 작성했는데 만약 prettier를 사용중이라면 prettier가 소괄호를 지워버리는 경우가 있다. prettier의 사용을 중단하고 소괄호를 작성해도 해결 가능하지만 기본 문법인 중괄호와 return을 사용해도 해결 가능하다.
'스터디로그 > javascript' 카테고리의 다른 글
표현식 (0) | 2020.12.03 |
---|---|
변수 (0) | 2020.12.03 |
ECMAScript (0) | 2020.12.02 |
발전사 (0) | 2020.12.02 |
역사 (0) | 2020.11.30 |