개발 도구 (Development Tools)/Node.js & MongoDB

[npm] ejs - DB에서 가져온 데이터를 HTML에 손쉽게 넣자

BiCute 2022. 6. 3. 10:00
반응형

 

#1 ejs란?

Embedded JavaScript Template

HTML을 조금 더 쉽게 사용할 수 있도록  도와주는 템플린 엔진입니다.

리액트처럼 서버에서 데이터를 가져와서 HTML에 바로 적용하여 사용할 수 있게 되는데 예를 들면 다음과 같습니다.

(더러운 클래스들은 부트스트랩용이니 무시하시고 중간중간의 <% %> 부분만 확인하시면 됩니다)

<div class="container">
<ol class="list-group list-group-numbered">
  <% for (var i=0; i < posts .length; i++){ %>
  <li class="list-group-item d-flex justify-content-between align-items-start" >
    <div class="ms-2 me-auto">
      <a href="/detail/<%= posts[i]._id %>"><div class="fw-bold"> <%= posts[i].title %> </div></a>
      <%= posts[i].contents %>
    </div>
    <button class="badge bg-danger delete" data-id="<%= posts[i]._id %>">DELETE</button>
  </li>
  <% } %>
</ol>
</div>

위와 같이 HTML문서에 for를 이용한 반복문을 서버에서 가져온 데이터의 수만큼 반복하고,

내용 또한 서버에서 가져온 제목과 설명으로 수십, 수백 개의 글을 한 번에 쉽게 처리할 수 있습니다.

(블로그 글, 쇼핑몰 아이템들 등)

 

ejs는 새로운 문법을 배울 필요 없이 거의 모든 명령을 <%로 시작해서 %>로 끝내면 되기에 매우 간편하게 사용할 수 있는 것이 특징입니다.

 

 

 

#2 설치하기

(1) ejs 설치

  터미널을 열어 ejs를 설치합니다.

npm install ejs

 

 

(2) ejs 등록

  js파일을 열어 상단부분에 다음 코드를 입력하면 ejs를 사용할 준비가 끝납니다..

app.set('view engin', 'ejs');

  *app 부분은 express와 함께 쓸때 상단 부분에 const app = express();이라고 적혀있을 건데 자신에게 맞는 이름으로 변경해 주면 됩니다.

 

 

 

#3 사용할때 참고할 것들

(1) 주요 태그

   <%   'Scriptlet' 태그, 제어 흐름용, 출력 없음

   <%=   템플릿에 값을 출력합니다(이스케이프 처리).

   <%-   이스케이프 처리되지 않은 값을 템플릿에 출력합니다.

   <%#   주석 태그, 실행 없음, 출력 없음

   <%%   리터럴 '<%' 출력

   %%>   리터럴 '%>' 출력

   %>   일반 종료 태그

   -%>   트림 모드('newline slurp') 태그, 줄 바꿈 다음에 오는 트림

   _%>  '공백 슬러핑' 종료 태그, 그 뒤의 모든 공백 제거

 

 

(2) views 폴더 생성

  ejs 파일은 views 폴더 안에 생성해줘야 합니다.

  ejs 형식으로 코드를 작성하기 위해선 html문서의 확장자를 ejs로 변경하면 되는데, ejs 파일은 views 폴더 안에 있어야 합니다.

  views 폴더를 생성한 후 그 안으로 파일을 옮겨주시면 됩니다.

 

 

(3) 사용 예

  DB에서 데이터 가져와서 ejs파일에서 가져다 쓰는 패턴 예

app.get('/list', function(req, res){
  //데이터 베이스의 'post'라는 collection에서 모든 자료를 배열(array)형식으로 찾아주세요
  db.collection('post').find().toArray(function(error, result){
    // ejs 파일을 랜더링해서 보여주세요. 그리고 위에서 찾은 결과(result)를 ejs로 보내주세요
    res.render('list.ejs', { 작명 : result });
  });
})

 

  ① DB에 저장 해당 위치(post라는 collection)에서 어떠어떠한 자료를 찾아 달라고 요청 

  .find().toArray() = 모든 데이터를 배열로 

  ② 찾은걸 ejs로 보내달라고 요청. (오브젝트 형식으로 넣어주기때문에 이름은 원하는대로 작명)

  ③ HTML에서 <%= 작명 %> 형식으로 사용. 

  오브젝트 형식이기 때문에 실질적으론 <%= 작명[i].title %> 등으로 적용

 

 

 

반응형