본문 바로가기
자바스크립트(Javascript)

[Node.js] ejs-mate 사용하여 템플릿(template) 화면 만들기

by 즐거운코딩 2023. 8. 27.
반응형

node.js 를 통해 웹어플리케이션 만들 때 express 에서 제공하는 기본 템플릿 엔진대신 ejs-mate를 사용하면 각 화면에서 내비게이션바 같이 boilerplate(상용구) 같이 반복적인 기능을 효율적으로 구성할 수 있는 layout 템플릿 기능을 사용할 수 있습니다.

 

다음과 같이 예시를 들어 어떻게 효율적으로 화면을 구성할 수 있는지 알아보겠습니다.

 

  1.  ejs-mate 설치 및 사용환경 구성
  2.  boilerplate 화면 만들기
  3. 다른 화면에 적용하기

https://www.npmjs.com/package/ejs-mate

 

ejs-mate

Express 4.x locals for layout, partial.. Latest version: 4.0.0, last published: a year ago. Start using ejs-mate in your project by running `npm i ejs-mate`. There are 23 other projects in the npm registry using ejs-mate.

www.npmjs.com

1.  ejs-mate 설치 및 사용환경 구성

$ npm install ejs-mate 

app.js 파일에 ejs-mate 사용등록하고,

express 기본 엔진 대신 ejs 엔진을 사용하도록 합니다.

const ejsMate = require("ejs-mate");

app.engine("ejs", ejsMate);

 

2.  boilerplate 화면 만들기 

ejs-mate의 layout 사용하기 위해 views/layouts 디렉토리를 만들고, boilerplate.ejs 파일을 만듭니다.

이 파일은 모든 페이지 화면에서 공통적으로 사용하며, 단지 아래의 body 태그에 각 페이지별 변경되는 내용이 그대로 들어가게 됩니다.

<%- body -%> 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>BOILERPLATE!!!</title>
  </head>
  <body>
    <h1>BEFORE</h1>
    <%- body -%>
    <h1>AFTER</h1>
  </body>
</html>

모든 페이지에 적용되는지 확인해보기 위해 body 태그 앞 뒤로 h1 태그로 BEFORE / AFTER 를 붙여서 그대로 보여지는 지 확인해봅니다.

 

3. 다른 화면에 적용하기

홈화면에 해당하는 index.ejs 내용을 다음과 같이 수정합니다.

[수정전]

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Campgrounds</title>
  </head>
  <body>
    <h1>All Campgrounds</h1>
    <div><a href="/campgrounds/new">Add Campground</a></div>
    <ul>
      <% for (let campground of campgrounds) { %>
      <li>
        <a href="/campgrounds/<%= campground._id %>"><%= campground.title %></a>
      </li>
      <% } %>
    </ul>
  </body>
</html>

[수정후]

body에 해당되는 내용만 남기고 모두 삭제하고, 상단에 layout 태그내 boilerplate 파일 경로로 추가해 줍니다.

<% layout('/layouts/boilerplate') %>
<h1>All Campgrounds</h1>
<div><a href="/campgrounds/new">Add Campground</a></div>
<ul>
  <% for (let campground of campgrounds) { %>
  <li>
    <a href="/campgrounds/<%= campground._id %>"><%= campground.title %></a>
  </li>
  <% } %>
</ul>

다른 화면들도 boilerplate 적용하려면 body 내용에 해당하는 내용만 남겨두고 삭제합니다.

주의 사항으로 boilerplate 내 body 태그명은 변경하지 않도록 합니다.

 

 

반응형