• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

시퀄라이즈 논리연산자 처리방식 질문

21.05.20 22:58 작성 조회수 69

0

      where:{id:parseInt(req.params.id,10)||(req.user&&req.user.id)||0}

논리연산자 부분이 뭔가 부자연스러워서 한참을 생각해봤는데, 이것은 시퀄라이즈가 where  내부에 논리연산자 관련 처리를 해놓지 않았다면, :id 가 숫자이기만 하면 항상 req.params.id인 유저를 찾게되는 하나의 명령어인 것 같습니다. 

그러나 저 코드의 의도는 findOne(where:{id:req.params})를 해보고, 없다면 findOne(where:{id:(req.user&&req.user.id})를 해보고, 또 없다면 findOne(where:{id:0})을 최후의 수단으로 해라가 맞는 것 같습니다.

예를 들어 DB에 회원이 1명만 있다 가정하고, GET /100/followings 요청을 보낸다고 생각해볼 때, 논리연산식에 따르면 where:{id:100}인 findOne명령이 한 번 실행되고 끝이 아닌가요? where 내부에서 논리연산식을 사용하면 그에 맞게 시퀄라이즈가 똑똑하게  findOne 요청을 적절하게 여러번 보내게 되는건가요?

답변 1

답변을 작성해보세요.

0

시퀄라이즈는 아무 역할이 없습니다. 똑똑한 것도 아니고요. 그 논리식의 결괏값을 받아 그냥 처리할 뿐입니다. 그 값대로 요청은 한 번만 보냅니다.

G General님의 프로필

G General

질문자

2021.05.20

아하 감사합니다. 궁금한건 풀렸습니다! 시퀄라이즈는 안 똑똑하다..!

근데 그러면, 애초에 그냥 req.params.id를 숫자로 암묵적으로 단언해놓고, 혹시라도 /any/followings 요청 같은 괴상한 짓에 대응하기 위해서, 로그인을 했다면 그 유저의 팔로잉을, 안 했다면 0을 가져오게 처리만 해주고, id매치결과가 없는 경우는 에러로 넘기겠다는 의도인가요?

그럴거면 id:req.params.id 만 하고, 나머지 경우는 다 에러 처리 미들웨어로 보내고 로그 보면서 대응하는게 개발/배포 과정에서 더 좋지 않나요? 사실 이 경우엔 웬만큼 괴상한짓을 하지 않는 이상 에러가 안날거같긴한데..

애초에 타인 계정 가져오기, 내 계정 가져오기 라우터를 분리하는 게 더 나은 방법이라고 생각하긴 합니다.