Frameworks/Express.js

7. EJS 템플릿 undefined 변수 처리

양디 2016. 2. 2. 20:58


EJS 프레임워크 변수 처리


Express와 EJS 모듈을 사용하다 보면 같은 페이지에 다른 종류의 변수를 렌더해줘야하는 경우가 생긴다.

예를 들어 똑같은 login 페이지에, 성공할때에는 success 스트링을 출력하고, 실패할때에는 fail 스트링을 출력한다고 해보자.

1
2
3
4
5
6
router.get('/login'function(req, res, next){
    if(req.body.id == "dalkom")
        res.render('login', {success:"로그인 성공!"});
    else
        res.render('login', {err:"없는 아이디!"});
})
cs


위와 같은 라우팅 코드를 통해서 login.ejs 페이지를 렌더링한다고 할 때에,


아무 조치 없이 그냥 


<%=success%>


혹은


<%=err%> 


이런 식으로 코드를 작성하면 무조건 에러가 뜬다.


EJS 페이지는 err 변수를 요구하는데, 라우터에서 err 변수가 넘어오지 않았기 때문이다.


따라서 넘어오지 않은 경우를 처리해주어야 하는데, 일반적인 자바스크립트처럼


<%if(err)%> 이런 방식을 사용하면 편하겠지만, 이 경우에도 undefined 에러로 페이지가 뜨지 않는다.


따라서 locals라는 전체 변수를 가지고 있는 객체를 이용하여야 한다.


1
2
3
4
5
<%if(locals.err){%>
    <%=err%>
<%}else if(locals.success){%>
    <%=success%>
<%}%>
cs


위와 같은 식으로 하면, err가 있으면 err를 출력한다 라는 방식을 사용하면 되겠다.





댓글