본문 바로가기
매일코딩/Node.js

[node.js] 외부모듈

by 인생여희 2017. 3. 11.
반응형


필수개념

개념

설명

ejs.모듈/jade 모듈

웹 페이지를 동적으로 생성하는 템플릿 엔진 모듈

supervisor 모듈

파일의 변경 사항을 자동으로 인식하고 종료 후 다시 실행

forever 모듈

웹 서비스 장애와 같은 예외 상황을 대비하고자 만들어진 모델

npm install 모듈

외부모듈을 설치할 때 사용/설치한 모듈은 내장모듈처럼 사용가능

npm init 명령

node.js 프로젝트를 생성할 때 사용

package.json 파일

node.js 프로젝트의 환경 설정 정보를 담은 파일


node.js
npm 기반으로 모듈을 공유한다.

 

설치


$ npm install 모듈명

 

외부모듈 사용

// 모듈을 추출합니다.

var ejs = require('ejs');

var jade = require('jade');

 

ejs 모듈

ejs 모듈은 템플릿 엔진 모듈로 특정 형식의 문자열을 HTML 형식의 문자열로 변환한다.

 

) ejs 페이지를 html 페이지로 바꾸어 제공하는 서버

// 모듈을 추출합니다.

var http = require('http');

var fs = require('fs');

var ejs = require('ejs');

 

// 서버를 생성하고 실행합니다.

http.createServer(function (request, response) {

// ejsPage.ejs 파일을 읽습니다.

fs.readFile('7-6.ejs', 'utf8', function (error, data) {

response.writeHead(200, { 'Content-Type': 'text/html' });

response.end(ejs.render(data));

});

}).listen(52273, function () {

console.log('Server Running at http://127.0.0.1:52273');

});

 

 

//ejs 페이지를 html 파일로 변환할 때는 ejs 모듈의 render() 메서드를 사용한다.

//render(str,data,option) - ejs 문자열을 html 문자열로 변경합니다.

//참고: utf-8 로 파일 인코딩을 지정해서 esj 파일을 읽어야 한다.

 

ejs 기본형식

<% var name = 'RintIanTta'; %>

<h1><%= name %></h1>

<p><%= 52 * 273 %></p>

<hr />

<% for(var i = 0; i < 10; i++) { %>

<h2>The Square of <%= i %> is <%= i * i %></h2>

<% } %>

 

ejs 파일의 특수 태그

<%Code%> - 자바스크립트 코드를 입력한다.

<%=Value%> - 데이터를 출력한다.

 

데이터 전달

ejs페이지에 데이터를 전달하는 방법은 간단하다

render()메서드의 두 번째 매개변수에 전달하고자 하는 데이터를 입력한다.

 

) name속성과 description 속성을 전달.

// 모듈을 추출합니다.

var http = require('http');

var fs = require('fs');

//설치먼저 해야 ejs 모듈 사용할 수 있음

var ejs = require('ejs');

 

// 서버를 생성하고 실행합니다.

http.createServer(function (request, response) {

// ejsPage.ejs 파일을 읽습니다.

fs.readFile('7-8.ejs', 'utf8', function (error, data) {

response.writeHead(200, { 'Content-Type': 'text/html' });

response.end(ejs.render(data, {

name: 'RintIanTta',

description: 'Hello ejs With Node.js .. !'

}));

});

}).listen(52273, function () {

console.log('Server Running at http://127.0.0.1:52273');

});


7-8.ejs

<h1><%= name %></h1>

<p><%= description %></p>

<hr />

<% for(var i = 0; i < 10; i++) { %>

<h2>The Square of <%= i %> is <%= i * i %></h2>

<% } %>

속성 namedescription ejs 페이지 내부에서 생성한 것이 아니라 node.js 코드에서 전달 한 것

 

참고: ejs 모듈과 같은 템플릿 엔진은 동적 웹 페이지를 생성할 때 사용한다. 예로들면 포털 사이트 메인 페이지에 접속하면 서버는 데이터베이스에서 새로운 신문기사와 광고를 가져온다. 이어서 ejs 모듈과 같은 템플릿 엔진을 사용해서 웹페이지를 동적으로 구성해서 클라이언트에게 제공한다.


jade 모듈

 

설치후 모듈 추출

$ npm install jade

 

// 모듈을 추출합니다.

var jade = require('jade');

 

jade 모듈도 ejs모듈처럼 jade 페이지를 html 페이지로 바꾸어 제공한다.

 

7-10 웹 서버 생성 및 실행예)

// 모듈을 추출합니다.

var http = require('http');

var jade = require('jade');

var fs = require('fs');

 

// 서버를 생성하고 실행합니다.

http.createServer(function (request, response) {

// JadePage.jade 파일을 읽습니다.

fs.readFile('7-18.jade', 'utf8', function (error, data) {

// jade 모듈을 사용합니다.

var fn = jade.compile(data);

 

// 출력합니다.

response.writeHead(200, { 'Content-Type': 'text/html' });

response.end(fn());

});

}).listen(62273, function () {

console.log('Server Running at http://127.0.0.1:52273');

});

참고: ejs 모듈의 render() 메서드와 다르게 문자열을 리턴하는 것이 아니라 함수를 리턴한다.


메서드

compile(string,option) - jade 문자열을 HTML 문자열로 바꿀 수 있는 함수를 생성한다.

 

jade 기본형식

가장 중요한 것은 들여쓰기다.

꼭 들여쓰기는 탭과 띄어쓰기 중 한 가지 형태만 사용해야 한다. 아니면 오류 발생한다.

 

doctype html

html

head

title Index Page

body

// JADE String

h1 Hello jade .. !

h2 Lorem ipsum

hr

a(href="http://naver.com", data-test="multiple Attribute") Go To naver

 

jade 기본형식에서 div 태그 쉽게 하는법

div 태그를 직접 입력하지 않고 #header 태그를 입력하는 것만으로도 id 속성이 header div 태그를 생성할 수 있다. 마찬가지로 .article 태그를 입력하는 것만으로도 class 속성이 article div 태그를 생성할 수 있다.

 

)

doctype html

html

head

title Index Page

body

// JADE String

#header

h1 Hello jade .. !

h2 Lorem ipsum

hr

.article

a(href="http://naver.com", data-test="multiple Attribute") Go To naver


jade 기본형식의 script 태그와 style 태그

script 태그와 style 태그를 입력할 때 기호 . 을 찍어 준다.

)

doctype html

html

head

title Index Page

style.

* { margin:0px; padding:0px; }

h1 {

color:Red;

}

script(src="https://code.jquery.com/jquery-1.12.4.js")

script.

$(document).ready(function () {

var alpha = 10;

});

body

h1 Index Page

 

jade 특수 기호

- Code 자바스크립트 코드를 입력한다.

#{Value} - 데이터를 출력한다.

={Value} - 데이터를 출력한다.

#{} 태그를 사용하면 내용물 중가에 데이터를 입력할 수 있고 = 태그를 사용하면 내용전체를 데이터로 지정한다.

 


jade 코드로 데이터 전달

render() 메서드처럼 fn이라고 생성한 함수의 매개변수에 jade 페이지에 전달할 데이터를 입력한다. name 속성과 description 속성을 jade 페이지에 전달한다.

 

// 모듈을 추출합니다.

var http = require('http');

var jade = require('jade');

var fs = require('fs');

 

// 서버를 생성하고 실행합니다.

http.createServer(function (request, response) {

// JadePage.jade 파일을 읽습니다.

fs.readFile('7-20.jade', 'utf8', function (error, data) {

// jade 모듈을 사용합니다.

var fn = jade.compile(data);

// 출력합니다.

response.writeHead(200, { 'Content-Type': 'text/html' });

response.end(fn({

name: 'RintIanTta',

description: 'Hello jade With Node.js .. !'

}));

});

}).listen(52273, function () {

console.log('Server Running at http://127.0.0.1:52273');

});

 

jade 파일 예)

doctype html

html

head

title Index Page

body

// JADE String

h1 #{name} .. !

h2= description

hr

- for(var i = 0; i < 10; i++) {

p

a(href="http://naver.com") Go To naver #{i}

- }

 

서버실행모듈

위에서 살펴본 모듈은 지역모듈로 자바스크립트 파일 내부에서 require()함수로 추출했지만 서버 실행보듈은 전역 모듈로 터미널에서 곧바로 사용할 수 있는 모듈이다.


설치

$ npm install g supervisor

$ npm install g forever


supervisor 모듈

파일의 변경사항을 자동으로 인식하고 실행을 종료시킨 후에 다시 실행해준다.

 

기본명령어 확인

$ supervisor

 

기본파일

// 모듈을 추출합니다.

var http = require('http');

 

// 서버를 생성 및 실행합니다.

http.createServer(function (request, response) {

response.writeHead(200, { 'Content-Type': 'text/html' });

response.end('<h1>Test - File - 1</h1>');

}).listen(52273, function () {

console.log('Server Running at http://127.0.0.1:52273');

});

터미널에 $supervisor test.server.js 입력

그 후 위의 코드를 수정하면 자동으로 파일을 저장하고 변경해 준다.

response.end('<h1>Test - File 12345</h1>');

//참고 서버 프로그램을 실행할 때만 supervisor 모듈을 사용한다.


forever 모듈

웹서비스를 잘 구축해도 예외가 발생할 수 있다. 기존 멀티스레드 기반의 웹 서비스는 예외가 발생해도 전체 웹 서비스에 크게 영향을 주지 않았따. 하지만 node.js 같은 단일 스레드 기반의 웹서비스는 예외 하나로 웹 서빗 전체가 죽어 버린다. 그것에 대비하고자 만들어진 모듈이 forevere 모듈이다.

 

설치

npm install g foever

 

명령어 확인

$ forever

 

간단한예제)

// 서버를 생성 및 실행합니다.

require('http').createServer(function (request, response) {

if (request.url == '/') {

// 응답합니다.

response.write('<!DOCTYPE html>');

response.write('<html>');

response.write('<head>');

response.write(' <title>Forever</title>');

response.write('</head>');

response.write('<body>');

response.write(' <h1>Forever</h1>');

response.write('</body>');

response.write('</html>');

response.end();

} else {

// 오류를 발생합니다.

error.error.error();

}

}).listen(52273, function () {

console.log('Server running at http://127.0.0.1:52273');

});

위의 코드를 작성후 웹서버를 실행할 때 $forever start app.js를 실행

http://127.0.0.1:52273 에 들어가면 정상적인 결과 출력

http://127.0.0.1:52273/error 들어가도 정상적으로 동작

 

현재 실행되고 있는 서버 확인

$ forever list

 

프로세스 번호로 서버종료

 

$ forever stop 0 

반응형

'매일코딩 > Node.js ' 카테고리의 다른 글

[node.js] express 모듈2  (4) 2017.03.13
[node.js] express 모듈 1  (4) 2017.03.12
[node.js] HTTP  (0) 2017.03.10
[node.js] 이벤트  (2) 2017.03.09
[node.js] 기본 내장모듈  (2) 2017.03.08

댓글