Vue3의 라우터 설정 중 Hash mode vs HTML5 mode와 Navigation Guards에 대해 자세히 알아봅니다.
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes,
})
#/이 없이 깔끔하게 경로가 표시됩니다./detail과 같이 URL을 직접 입력하면, Vue 라우터가 아니라 서버에 요청하게 됩니다.import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({
history: createWebHashHistory(),
routes,
})
# 기호가 포함됩니다. 예: codingapple.com/#/detail# 뒤의 내용은 서버로 전달되지 않으므로, 라우팅 처리를 전적으로 Vue 라우터가 담당합니다.라우팅이 변경되기 전이나 후에 특정 코드를 실행할 필요가 있을 때 Navigation Guards를 사용합니다. 주로 로그인 여부 확인, 권한 검증 등 페이지 접근 제어에 활용됩니다.
/hello 경로에 접근하기 전에 로그인 여부를 확인하여, 로그인하지 않은 경우 /login 페이지로 리다이렉트하는 경우const routes = [
{
path: "/hello",
component: HelloWorld,
beforeEnter: (to, from) => {
if (로그인했냐 === false) {
return '/login'
}
// 별도의 return이 없으면 정상적으로 /hello로 이동
}
}
];
to: 이동할(목적지) 라우트 정보 (예: to.fullPath, to.params.id)from: 출발 라우트 정보참고: 라우터를 통한 검증은 클라이언트 측 보안만을 위한 것이므로, 실제 서비스에서는 서버에서도 반드시 인증 검증을 해야 합니다.
const router = createRouter({
// ...기타 설정
})
router.beforeEach((to, from) => {
// 페이지 변경 전에 실행할 코드
// 예: 로그인 여부, 권한 체크 등
})
beforeResolve(): 라우팅이 최종 결정되기 전에 실행afterEach(): 라우팅이 완료된 후 실행 (비동기 처리는 불가능)beforeRouteEnter(to, from, next) { }beforeRouteUpdate(to, from, next) { }to와 from 파라미터를 사용하여 현재 경로 및 변경 전 경로에 접근 가능합니다.#가 포함되지만, 서버 설정 없이 클라이언트 라우팅을 안전하게 처리할 수 있습니다.더 자세한 내용은 Vue Router 4 공식 문서를 참고.