ecsimsw

Template engine / pug 본문

Template engine / pug

JinHwan Kim 2019. 1. 15. 04:56

Template engine / Pug

  • Template Engine
    - 지금까지 포스팅한 내용으로 HTML을 이용하여 웹 페이지를 만드려고하면 html의 파일을 읽어 정적으로 사용 해야 할것이다. 이런 html 파일에서 변수에따라 출력을 달리하거나 반복을 만드려면 어떻게 해야할까. 아마 JS의 변수나 반복문이 너무나 그리울 것이다.
    - 템플릿 엔진은 이러한 상황에서 자바스크립트를 사용하여 html을 렌더링 할 수 있게 해준다. 대표적인 템플릿 엔진 PUG(jade)에 대해서 공부해왔다.
  • Pug _ Set
    - 다음을 터미널에서 프로젝트 폴더에 입력하는 것으로 pug 모듈을 설치한다.
    npm install pug --save
    - 아래는 초기 설정을 위한 코드이다.
    app.engine('pug', require('pug').__express) app.set('view engine','pug'); app.set('views','./views');
    - 위 두줄은 pug를 내부에서 어떤 템플릿 엔진을 사용할지 결정해주기 위한 코드고, 맨 아래는 현재 프로젝트 폴더에 생성된 views라는 폴더에서 템플릿 엔진을 로드할 것임을 설정해준다.
    - 위 초기 설정으로 템플릿을 렌더링하고 웹 브라우저에서 개발자 모드를 확인하면 렌더링한 파일의 html 형식이 아닌 지저분한 코드로 어지럽혀 있을 것이다. 이를 평소의 html 코드로 깔끔하게 보고 위해 설정에 다음을 추가한다.
    app.locals.pretty = true;
  • res.render
    - 다음으로 지정된 폴더의 index.pug 파일을 렌더링 할 수 있다. 이때 중갈호로 묶여 있는 객체를 인자로 넘겨주어 템플릿 안의 변수를 설정한다.
    res.render('index',{title:'JIN-HWAN'})
  • Example _
    - 아래는 지정 폴더에서 파일을 로드하여 랜더링하는 간단한 예제 코드이다.
    "test.js" var express = require('express'); var app = express(); app.engine('pug', require('pug').__express) app.set('view engine','pug'); app.set('views','./views'); app.locals.pretty = true; app.get('/',function(req,res, next){ res.render('index',{title:'JIN-HWAN'}) }) app.listen(3000, function(){ console.log("listen _ port:3000") }); "./views/index.pug" doctype html html head title= title link(rel='stylesheet', href='/stylesheets/style.css') body h1= title p Welcome to #{title}
  • Pug _ syntax
    - Pug의 기본 문법을 알아본다. 나는 서버 프로그래밍/ node.js 학습이 우선 목표였기 때문에 너무 깊게 공부하진 않았다. 기본 문법만을 가볍게 공부하였고, 이전에 html/css로 만들었던 웹 사이트를 템플릿으로 변환할 때는 html2jade와 같은 html을 pug(jade)로 변환시켜주는 웹 어플리케이션을 사용하였다.
    tag / text
    - 먼저 Pug는 HTML과 다르게 괄호로 태그를 선언하지 않는다.
    아래 예시에서 처럼 들여 쓰기로 태그의 부모 자식 관계를 규명하고 text를 쓸 때는 태그와 속성 뒤에 한칸 띄고 입력한다.
    "test.pug" doctype html html head title PUG body h1 Hello
    class / id
    - class와 id는 다음과 같이 태그명에 . 과 #을 붙이는 것으로 표현한다. (div의 class/id는 div를 생략하고 적어도 무방)
    "test.pug" p.contents T span#table T .opinion T
    property
    - 태그 안의 속성은 다음처럼 태그에 갈호를 치는 것으로 표현한다.
    "test.pug" a(href="https://www.google.com") T
    - script나 style 태그를 사용하고 싶으면 태그 뒤에 .을 붙여주는 것으로 사용할 수 있다.
    "test.pug" script. var msg ='Hello pug' alert(msg); style. h1{ font-size : 19px; }
    variable
    - 서버로부터 넘겨 받은 변수는 #{}과 =을 이용한다. 텍스트 안에서는 #{} 내부로 변수를 입력하고, 속성에서는 = 뒤를 변수로 입력한다.
    "test.pug" h1= name p Hello #{name}'s blog!! .class= contents "app.js" res.render('test',{name:'jinhwan', contents:'My name is Kim'});

'Server application > Node.js' 카테고리의 다른 글

FileStream / Querystring  (0) 2019.01.19
Serving static files / Grave accent  (0) 2019.01.16
Routing  (0) 2019.01.11
Middleware  (0) 2019.01.11
Express framework  (0) 2019.01.10
Comments