네비게이션 가드
네비게이션 가드의 종류
Global Before Guard
다른 url 주소로 이동할 때 항상 실행
router/index.js에 router.beforeEach() 를 사용하여 설정
콜백 함수의 값으로 다음과 같이 3개의 인자를 받음
to : 이동할 URL 정보가 담긴 Route 객체
from: 현재 URL 정보가 담긴 Route 객체
next : 지정한 URL로 이동하기 위해 호출하는 함수
콜백 함수 내부에서 반드시 한 번만 호출되어야 함
기본적으로 to에 해당하는 URL로 이동
URL이 변경되어 화면이 전환되기 전 router. beforeEach()가 호출됨
변경된 URL로 라우팅하기 위해서는 next()를 호출해줘야 함
Global Before Guard 실습
Login 여부에 따른 라우팅 처리
/hello/:userName 페이지를 제외하고는
전역 가드에서 기존 주소로 이동하기 때문에 정상적으로 작동
로그인이 필요한 페이지에 추가하면 비로그인 시 해당 페이지에 접근 불가
만약 view들이 여러 개라면 모두 추가해주어야 할까?
전체 route가 아닌 특정 route에 대해서만 가드를 설정하고 싶을 때 사용
beforeEnter()
route에 진입했을 때 실행됨
라우터를 등록한 위치에 추가
단 매개변수, 쿼리, 해시 값이 변경될 때는 실행되지 않고
다른 경로에서 탐색할 때만 실행됨
콜백 함수는 to, from, next를 인자로 받음
Login 여부에 따른 라우팅 처리
isLoggedIn = true 인 경우
Login을 제외한 다른 페이지로 이동하면 라우터 가드를 따로 설정해주지 않았기 때문에 라우터 가드가 동작하지 않음
이런식으로 특정 라우트만 따로 가드를 하고 싶은 경우에는 라우터 가드를 사용
isLoggedIn = false로 변경하면 Login페이지로 정상 이동 가능
params 변화 감지
navbar에 있는 Hello를 눌러 harry에게 인사하는 페이지로 이동
변화하지 않는 이유
404 Not Found
사용자가 요청한 리소스가 존재하지 않을 때 응답
이제 요청한 리소스가 존재하지 않을 때 404로 이동하도록 해주자
요청한 리소스가 존재하지 않는 경우
형식은 유효하지만 특정 리소스를 찾을 수 없는 경우
예시) Django에게 articles/1/로 요청을 보냈지만, 1번 게시글이 삭제된 상태
해결책
404 Not Found