-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
시퀄라이즈 논리연산자 처리방식 질문
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 요청을 적절하게 여러번 보내게 되는건가요?
답변을 작성해보세요.
0
조현영
지식공유자2021.05.20
시퀄라이즈는 아무 역할이 없습니다. 똑똑한 것도 아니고요. 그 논리식의 결괏값을 받아 그냥 처리할 뿐입니다. 그 값대로 요청은 한 번만 보냅니다.
G General
질문자2021.05.20
아하 감사합니다. 궁금한건 풀렸습니다! 시퀄라이즈는 안 똑똑하다..!
근데 그러면, 애초에 그냥 req.params.id를 숫자로 암묵적으로 단언해놓고, 혹시라도 /any/followings 요청 같은 괴상한 짓에 대응하기 위해서, 로그인을 했다면 그 유저의 팔로잉을, 안 했다면 0을 가져오게 처리만 해주고, id매치결과가 없는 경우는 에러로 넘기겠다는 의도인가요?
그럴거면 id:req.params.id 만 하고, 나머지 경우는 다 에러 처리 미들웨어로 보내고 로그 보면서 대응하는게 개발/배포 과정에서 더 좋지 않나요? 사실 이 경우엔 웬만큼 괴상한짓을 하지 않는 이상 에러가 안날거같긴한데..
답변 1