render
와 redirect
의 차이가 궁금해서 구글링해봤지만 전부 django
에 관한 내용들만 보였다...
어쩌면 너무 쉬운거라 나빼고 다 알고 있던거일수도...?
암튼 그래서 공식문서를 참고해 혼자 분석해보기로 했다.
차이는 다음과 같다.
결론부터 간단하게 말하자면
render는 템플릿
을 보낼 때,redirect는 경로(URL)
을 보낼 때 사용한다. (그래도 자세하게 알아보면 좋으니 파해쳐보자!)
redirect
는 경로와 함께 상태를 같이 보낸다.
여기서 상태는 http 상태코드에 해당하는 양의 정수다.
상태를 지정하지 않는다면 상태는 기본적으로 found
라는 뜻을가진 302
로 설정된다.
상태코드별로의 의미는 다음 사이트에 전부 정리 되어있다.
사용법은 다음과 같다.
res.redirect(302, "myHome");
render
는 템플릿과 함께 객채를 전달하고, 콜백함수를 전달한다.
res.render('user', { name: 'jaeyun' }, function (err, html) {
// ...
})
콜백함수는 err
메시지와 템플릿의 html
을 반환 해 준다.
render
에서 상태코드를 쓰고싶다면 res.status(200).render(~) 이런 형식으로 작성하면 된다.
매개변수에서 알 수 있듯이 redirect
는 path
(경로)를 전달한다.
때문에 다음과 같은 코드가 구글 웹사이트로 redirect
되는걸 볼 수 있다
return res.redirect("http://google.com");
그래서 평소 개발할 때 router를 이용하는 것이다.
localhost:4000/login 이라는 페이지가 있다면
return res.redirect("/login")
router -> controller -> views로 통한다.
반면에 render
는 view
매개변수를 갖고 있다. 때문에 전달값에 경로를 입력해주면 오류가난다.
즉, 템플릿을 보내기 위한 response
이다
생각보다 간단했다!
단순히 어떤 방식으로 페이지를 응답할 것인지 차이다
경로(URL), 라우터 + 상태를 보내고 싶으면 -> redirect
템플릿 전달 + 템플릿에 전달할 객체 + 콜백함수를 통한 오류, html확인을 원한다면 -> render
좀 더 심오한 내용은 공부하면서 느껴 보고 또 정리 해야겠다.
thanx