IT,프로그래밍/Node.js

[Node.js]EJS 태그 삼형제

EJS 에서 변수 를 받아서 사용하는 폼은 크게 3가지가 있다

<% Something %>  <%- Something %> 그리고 <%= Something %> 이다.

이제 부터 이 3가지의 차이점이 무엇인지 하나하나 알아가 보자.

1. <% %>

EJS 에서 <% %> 는 소스내 에서 실행되지만 보이지는 않는 태그이다

무슨 의미냐면 클라이언트 들은 화면에서 보이지 않지만
실행이 되는 태그라는 뜻이다.
<% if(i%2) { %>class="odd"<% } else { %>class="even" <% }%>

위의 소스에서 i 가 짝수면 odd 를 아니라면 even 을 class 값으로 주는 소스이다. 
여기에서 <% %> 를 이용해서 if 로 조건문을 줄수 있지만 사용자는 보이지 않는다.


2. <%- %>

이 태그는 <% %> 태그와는 조금 다르게 HTML 코드를 날것(Raw)로 보여줍니다
<% something %>  <% -something %> 의 차이점은
<% something %> 은 소스에 보이지 않는 흐름제어 태그이고
<%- something %> 는 HTML 태그들을 이스케이프 문자 없이 RAW 한 상태 로 출력해줍니다.

즉, <%- %> 태그를 이용하면 아래와 같이 HTML 소스를 include 해서 사용이 가능합니다. 
update.ejs
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<%- include ./head %>
</head>

head.ejs
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="/">Start Node.js with Express</a>
.
.
.

위의 소스를 보면 알겠지만 html 소스 인 head 파일을 update.ejs 에 include 하였다

3. <%= %>

이 태그는 <%- %> 와 매우 유사하지만 다른점이 있다.

바로 이스케이프 문자를 포함한다 무슨말이냐면

<P>HELLO WORLD</P>

head.html

백날 <%= include ./head %> 와 같은 방법으로 기존의 소스에 추가하려고해도

상상했던대로 <p>HELLO WORLD</p> 가 소스에 삽입 되는것이 아닌 
"<p>HELLO WORLD</p>" 와 같이 HTML 소스가 그대로 값으로 들어가져 버린다.

즉, <%= %> 태그는 다른 페이지 에서 받아온 데이터 를 넣어줄때 쓰인다

예를 들면 <input type=text value=""> 라는 소스에 value 값에 title 이라는 데이터를 넣어주고 싶다면 <%- %> 이 아닌

<input type=text value="<%=title%>"> 과 같이 해주면 받아오는 title 값에 따라 
value 값이 달라지게 된다.


3줄요약

  1. <% %> 는 흐름제어에 쓰인다 주로 소스내의 분기를 내줄때 쓰인다

  2. <%- %> 는 RAW 한 데이터를 표시해준다(이스케이프 문자 없이) 주로 include 등을 할때 쓰인다

  3. <%= %> 는 이스케이프 문자가 포함되며 주로 다른페이지의 값을 사용할떄 쓰인다