본문 바로가기
NODE.JS

Node.js - Express 를 이용한 웹 앱 만들기 (템플릿 엔진 - jade)

by devLog by Ronnie's 2021. 6. 12.

Node.js - Express 를 이용한 웹 앱 만들기

 

Node를 이용하여 웹 어플리케이션을 만들때 가장 많이 쓰는 Express를 이용한다.

Express는 가장 인기있는 Node웹 프레임워크이다.

 

1. Express 설치

Express 모듈을 설치한다.

npm install express --save

--save는 dependencies를 추가하기위함. (package.json 파일에서 확인 가능.)

 

2.app.js

var express = require("express"); // express모듈 로드. express변수를 통해 모듈 제어가능.
var app = express(); // 위에 선언된 express는 함수를 리턴함으로 express()를 호출해줌.
var bodyParser = require("body-parser");

app.set("view engine", "jade");
app.set("views", "./views"); // jade에서는 관습적으로 템플릿 파일들을 views 폴더 안에서 관리한다. 설정을 안해줘도 디폴트(views)로 설정되어 있긴하다.

app.use(express.static("public")); //정적인 파일이 위치할 디렉토리를 지정하는 기능. (디렉토리명 지정 -> public 관습적으로 퍼플릭이라고 명함)
//정적인 파일을 서비스하고 싶을때 !.
app.use(bodyParser.urlencoded({ extended: false }));

app.get("/", function (req, res) {
  // 루트 설정
  res.send("hello home page");
});

app.get("/login", function (req, res) {
  res.send("login please~");
}); // get 메서드란 특정경로로 들어왔을때 어떠한 동작을 할지 결정함. 이때 get을 라우터라 부르고 get이 하는일을 라우팅이라고한다 (길을 찾는것.)

app.get("/template", function (req, res) {
  res.render("temp", { time: Date(), _title: "jade" }); // render를 하게 되면 views에 디렉토리에서 템플릿엔진이 jade로 설정되어 있는 것을 확인하고 temp.jade를 랜더링해줌.
}); // 변수 전달시 위처럼 사용함. // jade에서 변수 사용시 =변수명 으로 선언하고 render에서 파라미터로 전달해준다.
app.locals.pretty = true; // 이게 없으면 jade 포맷이 줄맞춤같은게 제대로 되서 안나온다. 이거 써주면 포맷에 맞춰서 잘 나오게 됨.

app.get("/dynamic", function (req, res) {
  var lis = "";
  for (var i = 0; i < 5; i++) {
    lis = lis + "<li>coding</li>";
  }
  var time = Date();
  //동적으로 웹페이지를 만드는것.
  var output = ` 
    <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    Dynamic Static
    <ul>
    ${lis}
    </ul>
    ${time}
</body>
</html>`; // `` 이걸 사용하면 내용 그대로 사용가능하다. html에서는 동적인 코딩이 불가능하므로 이렇게 코딩하여 값을 넣을수 있음.
  res.send(output); //  이 내용은 재부팅을 해야된다. 동적이기때문에.
});

app.get("/topic", function (req, res) {
  // 쿼리스트링을 통한 인자 전달시.
  //res.send(req.query.id + "," + req.query.name); // 인자 여러개 받을때
  var topics = ["11111", "22222", "33333"];
  var output = `
    <a href="/topic?id=0">11111</a><br>
    <a href="/topic?id=1">22222</a><br>
    <a href="/topic?id=2">33333</a><br>
    ${topics[req.query.id]}
  `; // ~ 아래 `
  res.send(output);
});

//시멘틱 url 변환시
app.get("/topic/:id", function (req, res) {
  // 쿼리스트링을 통한 인자 전달시.
  //res.send(req.query.id + "," + req.query.name); // 인자 여러개 받을때
  var topics = ["11111", "22222", "33333"];
  var output = `
    <a href="/topic?id=0">11111</a><br>
    <a href="/topic?id=1">22222</a><br>
    <a href="/topic?id=2">33333</a><br>
    ${topics[req.params.id]}
  `; // ~ 아래 `
  res.send(output);
});

app.get("/topic/:id/:mode", function (req, res) {
  res.send(req.params.id + "," + req.params.mode);
});

app.get("/form", function (req, res) {
  res.render("form");
});

app.get("/form_receiver", function (req, res) {
  var title = req.query.title;
  var description = req.query.description;
  res.send(title + "," + description);
});

app.post("/form_receiver", function (req, res) {
  var title = req.body.title;
  var description = req.body.description;
  res.send(title + "," + description);
});

app.listen(3030, function () {
  console.log("connected 3030 port");
}); //3030포트로 리스닝하게 된다.

3. temp.jade

html
    head 
    title= _title 
    body
        h1 Hello Jade 
        ul 
            -for(var i=0; i<5; i++)
                li coding
        div= time

 

- var express = require("express"); 
var app = express();   --> express 사용 규칙.

 

-템플릿 뷰 엔진 선언

app.set("view engine""jade");

 

 

댓글