Templating Engines
정적인 html 을 이용하면 클라이언트가 언제 요청을 하더라도, 항상 고정된 문서를 보내줄 수가 있다.
Templating Engines을 이용하면 html의 뼈대만 구성해두고, 클라이언트가 요청했을때 서버에서 가지고 있는 데이터에 맞게 페이지를 동적으로 만들어서 클라이언트에게 보내줄 수 있다.
Templating Engines 종류
- ejs
- pug
- handlebars
- mustache
- hogan
EJS가 보편적으로 많이 사용된다.
순수 자바스크립트로 되어있을때는 Templating engine을 사용해도 상관없지만, 조금 더 복잡한 서버사이드 렌더링을 하려면 React와 Nextjs 를 통해 조금 더 심도있게 사용할 수 있다.
템플릿 엔진 ejs 테스트
<!--index.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>Dylan</title> </head> <body> <h1>Welcome! <%= name %></h1> </body> </html> <!--test.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>TEST</title> </head> <body> <h1>TEST!! </h1> <ul> <% tests.forEach(test=>{ %> <li><%= test.name %></li> <% }) %> </ul> </body> </html> <!--not-found.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>Not Found!</title> </head> <body> <h1>Sorry, <%= name %>, Not Found..</h1> </body> </html>
/* app.js */ const http = require('http'); const fs = require('fs'); const ejs = require('ejs'); const name = 'Dylan'; const tests = [{name:'HTML'},{name:'CSS'},{name:'Javascript'},{name:'Node'}]; const hostname = '127.0.0.1'; const port = 8080; const server = http.createServer((req,res)=>{ const url = req.url; res.setHeader('Content-Type','text/html'); if(url === '/'){ ejs .renderFile('./template/index.ejs', {name}) .then((data)=>res.end(data)); }else if(url ==='/test'){ ejs .renderFile('./template/test.ejs', {tests}) .then((data)=>res.end(data)); }else { ejs .renderFile('./template/not-found.ejs', {name}) .then((data)=>res.end(data)); } }); server.listen(port,hostname,()=>{ console.log(`Server running at http://${hostname}:${port}`); });
- 참고 : https://ejs.co/