[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/WEB

Node.js - express view engine (Nunjucks)

inu 2020. 10. 13. 17:07
반응형

view engine

  • view engine이란 DB의 내용 등을 자연스럽게 HTML에 보여줄 수 있도록 하는 엔진이다.
  • html 내부에서 해당 엔진을 활용해 반복문, 조건문 등을 사용할 수 있다.
  • 다양한 패키지가 존재하는데 우리는 그 중 Nunjucks를 사용할 것이다.
  • npm install nunjucks 명령어를 통해 패키지를 설치한다.
npm install nunjucks

nunjucks

nunjucks.configure('template', {
    autoescape: true,
    express: app
});
// template를 인식하고 사용하겠다
// autoescape는 보안상 true
// express : app는 사용할 주체
  • nunjucks.configure를 통해 적용할 html 페이지의 위치를 결정할 수 있다.
  • 해당 위치 하위의 파일은 전부 nunjucks가 적용되어 활용 가능하다.
  • autoescape는 보안상의 이유로 대부분 true옵션을 준다. (false로 해놓으면 html태그를 허용한다.) html태그 사용이 필요할 경우 사용할 때 safe 옵션을 준다.
  • express는 활용의 주체가되는 express객체이다.

  • template 폴더를 프로젝트 최상위 폴더에 생성한다
  • 라우팅이 되어 있을 경우 해당하는 폴더도 만들어주어야 한다. (admin)
  • 해당 폴더에 html 파일을 만들고 활용한다.
router.get('/products', (req, res) => {
    res.render('admin/products.html', {
        message: "hello!!!!!!!!",
        online: "online now"
    })
});
  • 활용시엔 위와 같이 활용한다.
  • 현재는 DB활용에 대해 배우지 않았기 때문에 {}안에 문자열 데이터를 담아 보낸다.
products
{{ message }}
{{ online }}
  • products.html 파일은 위와같이 구성되어 있다.
  • 만약 내부 내용이 html 태그라면 autoescape로 막히게 되지만 | safe 옵션을 주어 이를 허용할 수 있다.
  • 서버를 돌리면 아래와 같이 정상적으로 페이지가 구성된다.


템플릿 상속

  • 웹페이지를 구성하다 보면 여러 템플릿을 만들게 된다. 그 중에는 레이아웃이 겹치는 경우도 많을 것이다. (상단메뉴, 배너 등)
  • 매번 html 파일을 작성할 때마다 같은 레이아웃을 구현하는 것은 매우 비효율적이다.
  • 따라서 대부분의 웹 프레임워크에서는 템플릿 상속이라는 기능을 제공한다.
  • 템플릿 상속 기능을 이용하면 하나의 레이아웃을 구성하고 그를 계속해서 재활용할 수 있다.

Nunjucks 템플릿 상속

  • template 폴더에 layout 폴더를 만들고 그 안에 base.html을 만든다.
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{ title }}</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>

<body>
    <div class="container" style="padding-top:100px;">

        {% block content %}{% endblock %}

    </div>
</body>

</html>
  • base.html을 위와 같이 구성한다. 부트스크랩을 이용하는 코드가 기본 베이스로 깔려있으며, 전체적인 내용이 div class="container"에 들어가게된다.
  • {% block content %}{% endblock %}부분만 작성하면 새로운 html파일에서는 해당 부분만 변경되면서 base.html의 내용은 그대로 가져가는 것이다.
  • 해당 base.html에는 부트스트랩을 불러오는 과정만 포함되어 있다.
{% set title = "관리자 리스트" %}
{% extends "layout/base.html" %}

{% block content %}
<table class="table table-bordered table-hover">
    <tr>
        <th>제목</th>
        <th>작성일</th>
        <th>삭제</th>
    </tr>
    <tr>
        <td>제품 이름</td>
        <td>
            2020-03-07
        </td>
        <td>
            <a href="#" class="btn btn-danger">삭제</a>
        </td>
    </tr>
</table>

<a href="/admin/products/write" class="btn btn-default">작성하기</a>

{% endblock %}
  • base.html을 활용해 작성한 새로운 html파일이다.
  • set title로 title을 설정할 수 있다.
  • 그리고 extends "layout/base.html"로 베이스가 될 html파일을 지정한다.
  • {% block content %}{% endblock %} 사이에 들어갈 내용을 입력한다.

  • 정상적으로 부트스트랩을 이용해 페이지를 출력한다.
반응형

'🛠 기타 > WEB' 카테고리의 다른 글

Node.js - Event Emitter  (0) 2020.12.10
Node.js - express 미들웨어  (0) 2020.10.14
Node.js - express Router  (0) 2020.10.13
Node.js - nodemon  (0) 2020.10.13
Node.js - express 시작  (0) 2020.10.13