/about
, /user/profile
같은 경로/user/:name
에서 :name
은 변동 가능한 값라우트를 등록할 때, 정적 경로는 그대로 저장하고, 동적 경로는 변수를 추출해 정규 표현식으로 변환하여 처리
// 예시: 라우트 등록
router.get("/user/", staticHandler); // 정적 경로
router.get("/user/:name/", dynamicHandler); // 동적 경로
동적 경로는 :name
이나 :id
와 같은 변수 부분을 정규 표현식으로 변환.
이때 변수 이름을 추출해 저장한 후, 정규식과 함께 관리
예를 들어, /user/:name/
경로는 /user/([^/]+)/
정규식으로 변환 → ([^/]+)
는 슬래시(/
)를 제외한 문자열을 매칭하는 패턴
// 동적 경로 등록 시 처리 예시
router.get("/user/:name/", dynamicHandler);
// "/user/:name/" -> "/user/([^/]+)/" 정규식으로 변환
클라이언트 요청이 들어오면, 라우터는 먼저 정적 경로를 우선적으로 매칭
예를 들어, /user/testname/
요청이 들어오면 서버는 먼저 /user/
정적 경로를 매칭 시도 → 정적 경로에서 매칭되지 않으면 동적 경로로
// 요청이 들어오면 정적 경로 먼저 매칭 시도
router.matchRoute("/user/testname/"); // 정적 경로 `/user/` 매칭 안됨
정적 경로 매칭에 실패하면, 동적 경로를 확인
등록된 동적 경로의 정규식을 사용해 요청 URL과 비교하고, 매칭되면 동적 변수 값을 추출
예를 들어, /user/testname/
요청이 들어오면, 동적 경로 /user/:name/
의 정규식 /user/([^/]+)/
와 매칭 → testname
값을 name
변수에 할당
// 동적 경로 정규식 매칭 시도
const match = "/user/testname/".match("/user/([^/]+)/");
if (match) {
const params = { name: match[1] }; // 추출된 변수 값: { name: "testname" }
dynamicHandler(params); // 핸들러에 변수 전달
}