View engine을 활용한 응답처리

tintwo·2022년 11월 25일

express에서 html 응답을 줄 때 데이터와 html 데이터를 어떻게 결합해서 응답할까?

지금까지 간단한 html과 데이터만 응답처리 했지만, 더 복잡한 html을 처리해야 한다면?

 res.send('<h1>welcome ' + req.body.email + '</h2>')
 // 이 괄호 안에 사실 html 태그를 모두 만들어 넣는건 너무 비효율 적이다.

npm install ejs --save

설치를 완료 했다면, 다른 lib처럼 import를 시켜야 하는데 view engine 같은 경우 set만 해주면 된다.

var express = require('express')
var app = express()
var bodyParser = require('body-parser')
// 원래 이렇게 추가해 줬었지만 

app.listen(3000, function() {
  console.log("start! express server on port 3000 ");
});

app.use(express.static('public'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:true}))
app.set('view engine', 'ejs')
// 이렇게만 추가 해준다면 사용이 가능 하다.
// 'ejs'도 문자열로 적어줘야 한다. 그냥 ejs로 쓰고 서버 켜니 안켜짐;

view engine은 views 폴더를 따로 만들어줘야 한다.

views 폴더 안에 email.ejs를 만들고, 간단하게 작성 한다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>email ejs template</title>
</head>
<body>
  <h1>Welcome <%= email %> </h1>
  // <%= %> 혹시 연산도 될까 궁금해서 해봤다
  <h1>your input count : <%= count + 100 %></h1>

  <p>^_^</p>

</body>
</html>

6+100 이면 106이 나와야 하는데 아무래도 문자열을 더해서 그런가 6100이 나온다.

어떻게 해야 처리가 가능할까

  <h1>Welcome <%= email %> </h1>
  <% var num = number(count) + number(100) %>
  // 문자열을 형 변환 해보며 시도 했으나 500 error 발생 
  // 아무래도 문법이 틀린 듯
  <h1>your input count : <%= num %></h1>
  <h2>test : <%= 10 -2 %></h2>
  // 이건 연산이 잘 된다.
  <p>^_^</p>

이렇게 해봐도 저렇게 해봐도 잘 안된다.

꼭 이벤트 걸어서 처리해야 되는건가?

일단 ejs 부터 한번 다시 봐야 할 것 같다.

ejs 외에 다른 view engine도 있다.
https://expressjs.com/en/guide/using-template-engines.html

profile
study records of beginner developer

0개의 댓글