작성
·
254
0
안녕하세요. 앞에 sequelize 문법쪽 강의를 다 듣고 공식 문서도 확인해봤는데 제가 못찾는건지 이 부분의 문법이 생소해서 질문드립니다.
User.findOne({where: {email}});
where: {email}이라고 돼있는데, { }안에는 where절에 해당하는 조건이 들어가야 하는거 아닌가요?
user의 email에 해당하는 값이 위에서 const로 선언한 변수에 해당하는 email값과 동일한 데이터를 찾는 문법이라는 것은 유추가 되는데 어떻게 저런 문법이 나온것인지 궁금합니다..!
답변 1
3
User.findOne({where:{email}});
위에 코드에서 왜 email이 {} 안에 감싸져 있는게 궁금하신거 같은데 이 {email}은 {email : email}과 같습니다.
자바스크립트 es6(es2015) 도입 이후 키와 값이 동일 하다면 이런식으로 { email : email } 을 { email }로 표현이 가능합니다. 한마디로 시퀄라이즈 문법이 아닌 자바스크립트 문법이라는뜻이죠
이제 시퀄라이즈로 넘어와서 코드를 다시 해석해보면 User라는 테이블에서 email 컬럼에 email 변수가 일치하는것이 있다면 User 객체를 반환할 것이고 아니면 undefined로 반환될 것입니다. 님의 데이터베이스의 만약 "abc1234@gmail.com"이라는 데이터가 있다고 가정할 때 email 변수안에 "abc1234@gmail.com"이라는 변수가 있다면 "abc1234@gmail.com"로우가 있는 User 객체를 반환하는 것이죠. 중요한점은 {email}이런 문법은 키와 값이 서로 같을 때 이런식으로 줄일 수 있다는것이고 해당 코드는
User.findOne({where:{email}});
를 사용하기 전에 email이라는 변수가 선언되어야만 자바스크립트가 email이라는 변수가 email이라는 키가 중복된것을 인지하고 위와 같은 문법을 사용가능하게 합니다. 만약 email이라는 변수가 없다면 위 문법은 사용할수 없을 것입니다.
const email = "abcd1234@gmail.com";
const obj = { email }; // email 변수가 있기 때문에 줄여서 사용가능
console.log(obj.email); // abcd1234@gmail.com
const obj = { email };
console.log(obj.email); // ReferenceError: email is not defined
우와 친절한 답변 정말 감사합니다!