작성
·
112
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 요청을 적절하게 여러번 보내게 되는건가요?
아하 감사합니다. 궁금한건 풀렸습니다! 시퀄라이즈는 안 똑똑하다..!
근데 그러면, 애초에 그냥 req.params.id를 숫자로 암묵적으로 단언해놓고, 혹시라도 /any/followings 요청 같은 괴상한 짓에 대응하기 위해서, 로그인을 했다면 그 유저의 팔로잉을, 안 했다면 0을 가져오게 처리만 해주고, id매치결과가 없는 경우는 에러로 넘기겠다는 의도인가요?
그럴거면 id:req.params.id 만 하고, 나머지 경우는 다 에러 처리 미들웨어로 보내고 로그 보면서 대응하는게 개발/배포 과정에서 더 좋지 않나요? 사실 이 경우엔 웬만큼 괴상한짓을 하지 않는 이상 에러가 안날거같긴한데..