뷰 템플릿 적용하기 8장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03

Slides:



Advertisements
Similar presentations
ⓒ 2015 NHN Entertainment Corp. Django 로 만드는 초간단 블로그 시스템운영팀 김영태 개발환경 구축.
Advertisements

1 넷스팟 MAC ID 설정 방법 ( 서울캠퍼스 기준 ) 각종 스마트폰의 WiFi 를 이용시 각종 스마트폰의 WiFi 를 이용시 MAC ID 설정을 하는 방법 입니다. 아이폰의 경우는 별도의 설정없이 바로 사용이 가능하오니, 사용이 어려울 경우, 고객센터로 문의하시면 됩니다.
2016 유성환 Hybrid MOBILE.
XHTML Basic 제 13 장 1. XHTML Basic의 개요 2. XHTML Basic 기본 문법 3. 표 만들기
군산대학교 통학버스 예약 시스템 APP 설치 매뉴얼
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
Chapter 10장 솔라리스 자원 관리 및 프로젝트 관리 Solaris2. 프로젝트 관리
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
패스포트로 사용자 인증하기 9장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
Power Java 제3장 이클립스 사용하기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
Ch.07-5 xml-rpc 사용하기 김상엽.
모바일 서버 만들기 13장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
위치기반서비스 서버 만들기 12장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
웹 서버 만들기 5장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
데이터베이스 사용하기 6장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
게시판 만들기 14장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
JSON-RPC 서버 만들기 11장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
8장. 원격지 시스템 관리하기.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
1. C++ 시작하기.
iframe 사용하기 Chapter 3 Part 2
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
26강. 포워딩(Forwarding) RequestDispatcher 클래스 HttpServletResponse 클래스
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
노드의 기본 기능 알아보기 4장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
IPAD2(ios 5.0.1) 사용자 메뉴얼 Mobile Service Team.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
Device Driver 임베디드 시스템 I.
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
명지대학교 통합모바일앱 E-Book 이용안내
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
노드 간단하게 살펴보기 2장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
8장 쿠키와 세션 한빛미디어(주).
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
웹디자인
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
컴퓨터 개론 및 실습 1주차 2015년 03월 05일.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
암호학 응용 Applied cryptography
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
함수, 모듈.
웹과 모바일 홈페이지의 이해와 제작 HTML태그와 CSS로 꾸미기
다자간 채팅프로그램 김형도 허영민
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
웹과 모바일 홈페이지의 이해와 제작 웹기획 & 제작
트위치 트게더 Twitogether 김준희.
Homework #3 - 페이지 모듈화 및 로그인처리 -
웹과 모바일 홈페이지의 이해와 제작 [PHP / MYSQL] 게시판 만들기
숙제 작성 및 제출 과정 김진하 2008/03/14.
구글 계정 생성가이드.
이 프레젠테이션은 PowerPoint의 새로운 기능에 대해 안내하며, 슬라이드 쇼에서 가장 잘 보입니다
7 생성자 함수.
20 XMLHttpRequest.
Presentation transcript:

뷰 템플릿 적용하기 8장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03 ○ 본 강의 자료는 이지스퍼블리싱에서 제공하는 강의 교안입니다. ○ 본 강의 교안은 아래 출판 서적의 내용을 기준으로 구성되었습니다. 또한 다수의 기타 서적이나 사이트를 참조하였습니다. 레퍼런스를 참조하십시오. 2017, 정재곤, “Do it! Node.js 프로그래밍 (개정판)”, 이지스퍼블리싱 - 강의 교안에 사용된 화면 캡처나 실습 자료의 경우에는 문서 업데이트에 따라 변경될 수 있습니다.

응답 웹문서를 템플레이트로 미리 만들어둘 수 있을까? 강의 주제 및 목차 강의 주제 응답 웹문서를 템플레이트로 미리 만들어둘 수 있을까? 목 차 1 ejs 뷰 템플릿 사용하기 2 pug 뷰 템플릿 사용하기

1. ejs 뷰 템플릿 사용하기 난이도 소요시간 20분

뷰 템플릿이란? 응답 웹문서를 미리 뷰 템플레이트로 만들어두고 응답 웹문서를 만들 때 데이터와 템플레이트를 결합하여 만드는 방식 사용

ejs 뷰 템플레이트 사용 익스프레스에서 뷰 엔진을 ejs로 설정 app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); // 원래의 응답 코드 res.writeHead('200', {'Content-Type' : 'text/html; charset = utf8'}); res.write('<h1>로그인 성공</h1>'); res.write('<div><p>사용자 아이디 : ' + paramId + '</p></div>'); res.write('<div><p>사용자 이름 : ' + username + '</p></div>'); res.write("<br><br><a href = '/public/login.html'>다시 로그인하기</a>"); res.end();

뷰 템플레이트 파일 생성 views 폴더 안에 login_success.ejs 파일 생성 HTML 파일과 동일하나 변수 설정 부분만 다름 <!DOCTYPE html> <html> <head> <meta charset = "UTF-8"> <title>로그인 성공 페이지</title> </head> <body> <h1>로그인 성공</h1> <div><p>사용자 아이디 : <% = userid %> </p></div> <div><p>사용자 이름 : <% = username %> </p></div> <br><br><a href = '/public/login.html'>다시 로그인하기</a> </body> </html>

응답 데이터를 뷰 템플레이트를 이용해 생성 app 객체의 render() 메소드를 호출하여 뷰 템플레이트로부터 응답 데이터 생성 가능 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); var context = {userid : paramId, username : username}; req.app.render('login_success', context, function(err, html) { if (err) { console.error('뷰 렌더링 중 오류 발생 : ' + err.stack); res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>뷰 렌더링 중 오류 발생</h2>'); res.write('<p>' + err.stack + '</p>'); res.end(); return; } console.log('rendered : ' + html); res.end(html);

뷰 엔진이 응답 데이터를 만들어내는 과정 ejs 파일을 템플레이트로 하고 데이터를 설정한 후 응답 데이터를 만들어 냄 % npm install ejs --save

응답 데이터 생성 과정 확인 웹페이지에서 요청 후 콘솔 확인 ▶ http : //localhost:3000/public/login.html

뷰 템플릿으로 사용자 리스트 응답 생성 원래 응답 코드 var listuser = function(req, res) { ……. database.UserModel.findAll(function(err, results) { res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); res.write('<h2>사용자 리스트</h2>'); res.write('<div><ul>'); for (var i = 0; i < results.length; i++) { var curId = results[i]._doc.id; var curName = results[i]._doc.name; res.write(' <li>#' + i + ' : ' + curId + ', ' + curName + '</li>'); } res.write('</ul></div>'); res.end();

listuser.ejs 파일 생성 여러 데이터를 배열로 받아 응답 데이터 만드는 템플레이트 파일 생성 <h2>사용자 리스트</h2> <div> <ul> <% for (var i = 0; i < results.length; i++) { var curId = results[i]._doc.id; var curName = results[i]._doc.name; %> <li>#<% = i %> - 아이디 : <% = curId %>, 이름 : <% = curName %></li> <% } %> </ul> </div> <br><br><a href = '/public/listuser.html'>다시 요청하기</a>

응답 데이터 생성 코드 listuser.ejs 템플레이트를 이용해 응답 데이터 생성 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿을 이용하여 렌더링한 후 전송 var context = {results : results}; req.app.render('listuser', context, function(err, html) { if (err) { ….. } console.log('rendered : ' + html); res.end(html); });

사용자 추가를 위한 뷰 템플레이트 만들기 공통 부분을 별도의 ejs 파일로 분리하여 만들 수 있음 원래의 adduser.ejs 파일 <!DOCTYPE html> <html> <head> <meta charset = "UTF-8"> <title>헤드 부분 - ejs에서 include됨</title> </head> <body> <h2><% = title %></h2> <br><br><a href = '/public/login.html'>로그인으로 - ejs에서 include됨</a> </body> </html>

Header와 Footer를 위한 템플레이트 파일 생성 상단 공통 부분은 header.ejs, 하단 공통 부분은 footer.ejs 템플레이트로 만듦 <head> <meta charset = "UTF-8"> <title>헤드 부분 - ejs에서 include됨</title> </head> <br><br><a href = '/public/login.html'>로그인으로 - ejs에서 include됨</a> <!DOCTYPE html> <html> <% include ./head.ejs %> <body> <h2><% = title %></h2> <% include ./footer.ejs %> </body> </html>

응답 데이터 생성 코드 adduser.ejs 템플레이트를 이용해 응답 생성 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿으로 렌더링한 후 전송 var context = {title : '사용자 추가 성공'}; req.app.render('adduser', context, function(err, html) { if (err) { ….. } res.end(html); });

2. pug 뷰 템플릿 사용하기 난이도 소요시간 20분

pug 뷰 템플레이트 사용하기 예전 이름은 jade 였음 최대한 간단한 형태로 입력하므로 공백과 들여쓰기를 기준으로 태그의 구조가 결정됨 들여쓰기를 잘못하면 문제 발생함 모듈 설치하고 뷰 엔진 설정 필요 app.set('views', __dirname + '/views'); app.set('view engine', ‘pug');

Pug 템플레이트 만들기 test1_success.pug 파일 생성 공백을 두 개 사용하여 들여쓰기 함 doctype html head title "성공" body block content #container p "조회에 성공했습니다."

클라이언트 요청 처리 함수 test1_success.pug를 이용해 응답 문서를 만드는 코드 추가 var test1 = function(req, res) { console.log('test 모듈 안에 있는 test1 호출됨.'); res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿을 이용하여 렌더링한 후 전송 var context = {}; req.app.render('test1_success', context, function(err, html) { if (err) { ….. } console.log('rendered : ' + html); res.end(html); }); }; module.exports.test1 = test1;

설정에 추가하고 웹페이지도 생성 config.js 파일에 새로 만든 라우팅 함수 추가 웹페이지 작성 ▶ http://localhost:3000/public/test1.html config.js 파일에 새로 만든 라우팅 함수 추가 route_info : [ ……. ,{file : './test', path : '/process/test1', method : 'test1', type : 'post'} ] 웹페이지 작성 <h3>Pug 테스트 1</h3> <p>아래 [조회] 버튼을 누르세요.</p> <br> <form id = "form1" method = "post" action = "/process/test1"> <input type = "submit" value = "조회" name = "" /> </form>

응답으로 받은 웹문서의 소스 구조 각 태그를 일대일로 매칭할 수 있음 % npm install pug-cli --global % pug test1_success.pug --pretty

Pug 템플레이트로 로그인 응답하기 login_success.pug 파일 생성 명령어로 미리 오류확인 가능 % pug login_success.pug --pretty doctype html html head meta(charset = 'utf8') title 로그인 성공 페이지 body h1 로그인 성공 div p 사용자 아이디 : #{userid} p 사용자 이름 : #{username} br a(href = '/public/login.html') 다시 로그인하기

템플레이트에서 응답 데이터 생성 app 객체의 render() 메소드 사용 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿으로 렌더링한 후 전송 var context = {userid : paramId, username : username}; req.app.render('login_success', context, function(err, html) { if (err) { ….. } console.log('rendered : ' + html); res.end(html); }); …….

pug로 응답 문서를 만드는 과정 뷰 엔진이 템플레이트와 데이터를 사용해 생성함

사용자 리스트를 위한 템플레이트 만들기 listuser.pug 파일 생성할 때 - 기호 사용하면 코드 추가 가능 doctype html html head meta(charset = 'utf8') title 사용자 리스트 페이지 body h1 사용자 리스트 div ul - for (var i = 0; i < results.length; i++) { - var curId = results[i]._doc.id; - var curName = results[i]._doc.name; li #{i} - 아이디 : #{curId}, 이름 : #{curName} - } br a(href = '/public/listuser.html') 다시 요청하기

뷰 템플릿으로 응답 문서 생성하는 코드 추가 user.js 파일의 코드 수정 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿으로 렌더링한 후 전송 var context = {results : results}; req.app.render('listuser', context, function(err, html) { res.end(html); });

사용자 추가를 위한 템플레이트 만들기 공통 부분을 layout.pug 라는 별도 파일로 만든 후 adduser.pug에서 상속하도록 만듦 doctype html html head meta(charset = 'utf8') title extends로 상속함 script(src = '/public/jquery-2.1.4.min.js') body block content include ./footer.jade

footer.pug와 adduser.pug 파일 생성 필요한 두 개의 파일 추가함 div#footer a(href = '/public/login.html') 로그인으로 - pug에서 include됨 extends layout block content h2 #{title}

Pug에서 extends와 include 사용

뷰 템플릿으로 응답 문서 생성하는 코드 추가 user.js 파일의 코드 수정 res.writeHead('200', {'Content-Type' : 'text/html;charset = utf8'}); // 뷰 템플릿으로 렌더링한 후 전송 var context = {title : '사용자 추가 성공'}; req.app.render('adduser', context, function(err, html) { if(err) {throw err;} res.end(html); });

참고 문헌 [ References] 기본 서적 2017, 정재곤, “Do it! Node.js 프로그래밍 (개정판)”, 이지스퍼블리싱 Node.js Site http://nodejs.org/