본문 바로가기
개발/Node.js

[Node.js] 뷰 템플릿 적용하기 - ejs 뷰

by 윤호 2021. 1. 11.

익스프레스에서 뷰 템플릿을 적용하는 법을 알아보겠습니다.

목차

  • MVC 패턴과 뷰 엔진
  • ejs 뷰 템플릿 사용 1
  • ejs 뷰 템플릿 사용 2

MVC 패턴과 뷰 엔진

 

MVC 패턴이란 Model, View, Controller로 구성되는 구조입니다. 눈에 보이는 부분을 뷰, 뷰로 표현되는 데이터를 제공하는 것은 모델, 처리되는 과정을 담당하는 것을 컨트롤러라 합니다.

 

뷰 에서는 모델에서 얻는 데이터와 뷰 템플릿을 바탕으로 사용자에게 응답할 웹문서를 만들어 응답합니다.

 

ejs 뷰 템플릿 사용 1

ejs란 embedded javascript의 약자로 html 문서 내에 자바스크립트 코드를 넣을 수 있게 해 줍니다. 위의 그림에서 <%= user id%>를 통해 userid란 변수를 사용한 것 처럼 말입니다. 이 ejs를 통해 뷰를 구현할 수 있습니다.

 

먼저 % npm install ejs --save 명령어로  ejs 모듈을 설치합니다.

 

로그인 예제를 보겠습니다. 다음의 코드를 뷰를 사용하여 바꾸는 것이 목표입니다.

/routes/users.js

docs가 존재하면 로그인이 성공한 코드인데 중요한건 res에 문자열로 html 코드를 입력하여 응답을 처리하는 것입니다. 이렇게 하면 불편한 점이 많기 때문에 응답할 html 코드를 분리해 주는 것이 뷰의 역할이라 볼 수 있습니다.

 

익스프레스 객체에 다음 코드로 뷰 엔진을 설정해줍니다.

/app.js

 

지정한 경로('/views')에 ejs 뷰 템플릿을 만듭니다. 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>로그인 성공 페이지</title>
</head>
<body>
    <h1>로그인 성공</h1>
    <div><p>사용자 아이디 : <%= userid %> </p></div>
    <div><p>사용자 이름 : <%= username %> </p></div>
    <br><br><a href='/public/login.html'>다시 로그인하기</a>
</body>
</html>

/views/login_success.ejs

 

바꾸고자 했던 부분을 뷰 엔진으로 바꿉니다.

if(docs){
    console.dir(docs);
    var username = docs[0].name;
    res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

    // 뷰 템플릿을 사용하여 렌더링한 후 전송
    var context = {userid:'jjang01', username:'짱구'};
    req.app.render('login_success', context, function(err, html){
        if(err){
            console.error('뷰 렌더링 중 에러 발생 : ' + err.stack);

            res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
            res.write('<h2>뷰 렌더링 중 에러 발생</h2>');
            res.write('<p>' + err.stack + '</p>');
            res.end();

            return;
        }
        console.log('rendered : ' + html);

        res.end(html);
    });
}

/routes/users.js

 

이렇게 코드를 바꾸고 실행해보면 바꾸기 전과 동일하게 작동하는 것을 볼 수 있습니다.

ejs 뷰 템플릿 사용 2

위의 예제에서 <%= 변수명 %>으로 html 문서 내에 변수를 지정하였습니다. 그리고 렌더링을 할 때 context를 받아 변수와 속성을 매핑하였습니다.

 

<% 자바스크립트코드 %> <%을 열어 자바스크립트 코드를 작성할 수 있습니다.

<!DOCTYPE html>
<html>
	<meta charset="UTF-8">
	<title>로그인 성공 페이지</title>
	<body>
		<h2>사용자 리스트</h2>
		<div>
			<ul>
				<% for (var i = 0; i < results.length; i++) {
					   var curId = results[i]._doc.id;
					   var curName = results[i]._doc.name; %>
					   <li>#<%=i %> - 아이디 : <%=curId %>, 이름 : <%=curName %></li>
				<% } %>	
			</ul>
		</div>
		<br><br><a href='/public/listuser.html'>다시 요청하기</a>
	</body>
</html>

 

<%-include(ejs템플릿 경로) %> 이 코드로 ejs 템플릿에서 ejs 템플릿을 참조할 수 있습니다.

<!DOCTYPE html>
<html>
	<%-include('./head.ejs') %>
	<body>
		<h2><%=title %></h2>
	
	</body>
</html>

 

<head>
	<meta charset="UTF-8">
	<title>헤드 부분 - ejs에서 include됨</title>
</head>

head.ejs

요약

  • 뷰 엔진을 사용하여 js코드와 응답할 페이지를 분리할 수 있다
  • ejs 템플릿에서 <% js 코드 %>, <%= 변수명 %>, <%-include(ejs템플릿 경로 %>

'Do it! Node.js 프로그래밍'을 공부한 내용입니다.

댓글