Express.JS의 Route Handler Mapping

이연중·2021년 11월 26일
0

노동일기(삽질)

목록 보기
1/3

NestJS로 API를 뽑아내는 작업을 하면서, 직면한 문제이다.


문제


a/:ida/b를 먹다
굉장히 신중하게 Route Handler의 URL을 작업했기 때문에 URL을 바꾸는 방법은 저 뒤로 하고, 왜 params를 포함한 url이 그 뒤에꺼를 먹을까에 대해 계속 분석해 보았다.(바보)

무조건 :idnumber 형식일 것이라 생각해 string 형식이 들어오면 당연히 그 뒤에 Handler로 매핑될 것이라 생각한 것이다.
실상은 그렇지 않았고, a/b에서 a뒤에 b:id로 인식되어 a/:id로 매핑된 것이다.
그래서 나는 a/b로 매핑되기를 의도하고 API를 쏘는데 계속 a/:id로 매핑되었던 것이다.

문제를 알았으니 이제 어떻게 해결할지를 강구해보았다.


해결


처음에는 params를 포함한 URL이 더 높은 우선순위를 가진다고 생각했었다.
하지만, Route Handler가 매핑되는 순서는 우선순위에 기반한 것이 아니었고, Controller에 나열된 순서대로 매핑되는 것이었다.(by Express.JS. 다른건 모르겠지만, Express는 그렇다)

그래서 params를 포함한 URL을 가진 Route Handler 위에 위치시켰고, 그에 따라 문제가 해결되었다(허무...)


짚어보기


어떤 프레임워크를 이용하던, 의도한 API로 매핑이되지 않을때는 Route Handler가 어떤 순서로 매핑이 되는지부터 확인하자!

profile
Always's Archives

0개의 댓글