2015년 4월 22일 수요일

Mac, Node.js 학습 6일차] 외부 모듈

Node.js에서 제공하는 내부 모듈이 아닌 외부 개발자가 만들어 배포하는 모듈을 외부 모듈이라 한다.
  - 외부 모듈 설치 방법
    $npm install 모듈명

1. ejs 모듈
템플리 엔진 모듈로써 특정 형식의 문자열을 HTML 형식의 문자열로 변환함
  - 모듈 설치
baesunghan:~/Documents/workspace/nodejs$npm instal ejs
ejs@2.3.1 node_modules/ejs
baesunghan:~/Documents/workspace/nodejs$

  - ejs 모듈 Method
    . render : ejs 문자열을 HTML 문자열로 변환한다.
  - ejs 에서 사용되는 특수 태그
    . <% Javascript code %> : javascript code를 기술, ex) <% var name = 'Toven' %>
    . <%= value %> : 변수값을 출력, ex) <%= name %>
  - 특수 태그로 데이터 전달 : 아래와 같이 render에 데이터 값 입력
response.end(ejs.render(ejsdata, {
name: 'Toven',
desc: 'Ejs Module Sample'
}));
  - 사용 예
baesunghan:~/Documents/workspace/nodejs$cat ejs.js
// 모듈을 추출합니다.
var http = require('http');
var ejs = require('ejs');

// 웹 서버를 생성 및 실행합니다.
http.createServer(function (request, response) {
var ejsdata = ejsMsg();
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(ejs.render(ejsdata, {
name: 'Toven',
desc: 'Ejs Module Sample'
}));

}).listen(18080, function() {
console.log('Server running at http://127.0.0.1:18080/');
});

var ejsMsg = function() {
var str = '';
str = str + '<h1><%= name %></h1>';
str = str + '<p><%= desc %></p>';
str = str + '<hr/>';
str = str + '<% for(var i=0; i<10; i++) { %>';
str = str + ' <h2>Count <%= i %> </h2>';
str = str + '<% } %>';

return str;
}baesunghan:~/Documents/workspace/nodejs$

2. jade 모듈
템플릿 엔진 모듈
  - 모듈 설치
baesunghan:~/Documents/workspace/nodejs$npm install jade
jade@1.9.2 node_modules/jade
├── character-parser@1.2.1
├── void-elements@2.0.1
├── commander@2.6.0
├── mkdirp@0.5.0 (minimist@0.0.8)
├── with@4.0.3 (acorn-globals@1.0.4, acorn@1.0.3)
├── constantinople@3.0.1 (acorn-globals@1.0.4)
└── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5)
baesunghan:~/Documents/workspace/nodejs$

  - jade 모듈의 Method
    . compile() : jade 문자열을 HTML 문자열로 바꿀수 있는 함수 생성

  - .jade 파일 작성 예
baesunghan:~/Documents/workspace/nodejs$cat jadedata.jade
doctype html
html
head
title Index Page
body
// JADE comment
h1 Hello Jade!!!
h2
hr
a(href='http://wechatmanager.co.kr') Link Wechatmanager

baesunghan:~/Documents/workspace/nodejs$
 
  - .jade 파일을 읽어서 client로 출력하는 예제
baesunghan:~/Documents/workspace/nodejs$cat jade.js
// 모듈을 추출합니다.
var http = require('http');
var jade = require('jade');
var fs = require('fs');

// 웹 서버를 생성 및 실행합니다.
http.createServer(function (request, response) {
// jade 파일을 읽음
fs.readFile('jadedata.jade', 'UTF-8', function(error, data) {
console.log(data);
var fn = jade.compile(data);
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(fn());

});

}).listen(18080, function() {
console.log('Server running at http://127.0.0.1:18080/');
});
baesunghan:~/Documents/workspace/nodejs$

    => 실행 결과 생성 html tag

  - .jade 파일에 사용된 특수 기호
    . - javascript : javascript 를 기술할 수 있음
    . #{Value} : 데이터 출력
    . = Value : 데이터 출력
  - 특수 Tag 사용 .jade  파일 예
baesunghan:~/Documents/workspace/nodejs$cat jadedata1.jade
doctype html
html
head
title Index Page
body
// JADE comment
h1 Hello #{name}
h2= desc
hr
// 자바스크립터 기술
- for(var i=0; i<10; i++) {
p
a(href='http://wechatmanager.co.kr') Link Wechatmanager
- }

baesunghan:~/Documents/workspace/nodejs$
  - 특수 기호에 데이터를 대치해서 출력하는 예
baesunghan:~/Documents/workspace/nodejs$cat jade.js
// 모듈을 추출합니다.
var http = require('http');
var jade = require('jade');
var fs = require('fs');

// 웹 서버를 생성 및 실행합니다.
http.createServer(function (request, response) {
// jade 파일을 읽음
fs.readFile('jadedata1.jade', 'UTF-8', function(error, data) {
console.log(data);
var fn = jade.compile(data);
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(fn({
name:'Teoven',
desc:'Jade Testing'
}));

});

}).listen(18080, function() {
console.log('Server running at http://127.0.0.1:18080/');
});
baesunghan:~/Documents/workspace/nodejs$

    => 실행 결과
    ==> "/자바스크립터 기술" 한글이 깨짐
    ==> readFile에서 encoding을 "EUC-KR"로 변경하면 다음 오류 발생함, 확인해보니 encoding은 "ascii", "utf8", "base64"만 가능함.
baesunghan:~/Documents/workspace/nodejs$node jade.js
Server running at http://127.0.0.1:18080/
fs.js:101
    throw new Error('Unknown encoding: ' + encoding);
          ^
Error: Unknown encoding: EUC-KR
    at assertEncoding (fs.js:101:11)
    at Object.fs.readFile (fs.js:252:3)
    at Server.<anonymous> (/Users/baesunghan/Documents/workspace/nodejs/jade.js:9:5)
    at Server.emit (events.js:110:17)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
    at Socket.socketOnData (_http_server.js:343:22)
    at Socket.emit (events.js:107:17)
    at readableAddChunk (_stream_readable.js:163:16)
    at Socket.Readable.push (_stream_readable.js:126:10)
   ===> 해결방법, response.writeHead에 다음과 같이 설정
     response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
     <출력결과>



댓글 없음:

댓글 쓰기