Node.js의 res.send를 사용하면 간단하게 페이지에 문자를 띄울 수 있다.
하지만 페이지가 복잡해지고 자바스크립트 문법까지 들어간다면 한계에 부딪힐 것이다.
Pug 라이브러리를 사용하면 간편하게 html을 작성할 수 있고
기본적인 자바스크립트 문법도 같은 파일에 작성할 수 있다.
먼저 Pug를 설치하는 방법이다.
터미널의 아래의 코드를 입력한다.
npm install pug
Pug와 Express를 연동하려면 Express의 기본값 세팅을 바꿔줘야 한다.

app.set 메서드로 view engine을 Pug로 변경한다.
app.set("view engine", "pug");
위의 공식문서를 보면 view와 관련된 파일은 views 폴더 안에 넣어야 한다고 나와있다.
views라는 폴더를 만들고 그 안에 main.pug와 같은 형식의 파일을 만든다.
만약에 views 폴더가 제일 위에 있지 않고 다른 폴더에 감싸 져 있다면
한 가지 더 설정을 해주어야 한다.
( project/views O
project/src/views X )
만약 위와 같이 scr폴더 안에 views 폴더를 넣고 싶다면 app.set으로 설정을 변경한다.
app.set("views", process.cwd() + "/src/views");
"views"의 기본값은 process.cwd() + /'views'이다.
Pug의 편리한 점은 html 코드에서 태그를 닫지 않아도 된다는 점이다.
1에서 5까지의 list를 화면에 출력하는 예제이다.
// numList.pug
doctype html
html(lang="ko")
head
title Document
body
ul
li 1
li 2
li 3
li 4
li 5
Pug는 Python처럼 탭으로 각 태그를 구분한다.
이제 위의 numList.pug 파일을 main.js 파일에 연결한다.
// main.js
import express from "express";
const app = express();
const num = (req, res) => {
return res.render("numList");
};
app.get("/num", num);
app.set("view engine", "pug");
app.listen(4000, () => {});
res.render 메서드에 pug 파일의 이름을 넣으면 pug의 내용이 화면에 출력된다.

1~5를 변수로 만드는 것도 가능하다.
// main.js
import express from "express";
const app = express();
const num = (req, res) => {
const count = 1;
return res.render("numList", { count: count });
};
app.get("/num", num);
app.set("view engine", "pug");
app.listen(4000, () => {});
count 변수를 선언하고 object 형태로 numList.pug 파일에 넘겨준다.
// numList.pug
doctype html
html(lang="ko")
head
title Document
body
ul
li #{count++}
li #{count++}
li #{count++}
li #{count++}
li #{count++}
위에서 넘겨받은 count 변수를 #{ } 안에서 사용할 수 있다.
실행해보면 같은 결과가 나타나는 것을 확인할 수 있다.

'Programming > Node.js' 카테고리의 다른 글
| [Node.js] Pug - mixin을 활용한 파일 정리 (0) | 2021.10.20 |
|---|---|
| [Node.js] Pug - partial (복붙 최소화하기) (0) | 2021.10.20 |
| [Node.js] express - Router로 파일 정리하기(3. 코드 작성) (0) | 2021.10.17 |
| [Node.js] express - Router로 파일 정리하기(2. 파일 구조 설계) (0) | 2021.10.17 |
| [Node.js] express - Router로 파일 정리하기(1. url 이름 짓기) (0) | 2021.10.15 |