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

[node.js] express 모듈 1

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

express 모듈 

 

http 모듈로 웹 서버를 생성하면 많은 일을 직접 처리해야 하므로 기존에 서버 생성 개념에 익숙하지 않다면 어렵다. express 모듈은 http 모듈에 여러 기능을 추가해서 쉽게 사용할 수 있게 만든 모듈이다.

 

개념

개념

설명

express 모듈

http 모듈처럼 사용할 수 있지만 훨씬 더 많은 기능이 있는 외부모듈

미들웨어

express모듈 use()메서드의 매개변수에 입력하는 함수를 말한다.

router

페이지 라우팅을 지원하는 미들웨어

static

지정한 폴더에 있는 내용을 모두 웹서버 루트 폴더에 올릴 때 사용

morgan

웹요청이 들어왔을 때 로그 출력

cookie parser

요청쿠키를 추출

body parser

post 요청 데이터를 추출한다.

connect-multiparty

multipart/form-data 인코딩 방식을 사용해 post 요청 데이터를 추출한다.

express-session

세션을 쉽게 생성할 수 있게 도와준다.

RESTful 웹 서비

일관된 웹 서비스 인터페이스 설계 기반의 rest 규정을 맞춰 만든 웹 서비스를 말한다.


express 모듈은 외부모듈이라서 설치가 필요하다.

$ npm install express@4

 

기본 서버

모듈추출 및 실행

express()함수로 애플리케이션 객체를 생성하고, listen()메서드로 웹 서버 설정 및 실행

 

// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// request 이벤트 리스너를 설정합니다.

app.use(function (request, response) {

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

response.end('<h1>Hello express</h1>');

});

 

// 서버를 실행합니다.

app.listen(52273, function () {

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

});

 

다른서버 실행방법

// 모듈을 추출합니다.

var http = require('http');

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// 서버를 실행합니다.

http.createServer(app).listen(52273, function () {

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

});

 

기본응답메서드

request 이벤트 리스너의 매개변수에는 request 객체와 response 객체가 들어간다.

 

request 이벤트 리스너 예)

app.use(function (request, response) {

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

response.end('<h1>Hello express</h1>');

});

express 모듈로 서버를 생성하면 request 객체와 response 객체에 대양한 기능이 추가된다.

 


response 객체의 매서드

response.send(body) - 매개변수의 자료형에 따라 적절한 형태로 응답한다.

 

response.json(body) - json 형태로 응답한다.

 

response.jsonp(body) - jsonp 형태로 응답한다.

 

response.redirect([status,] path) - 웹페이지 경로를 강제로 이동한다.


response.send() 메서드는 매개변수의 자료형에 따라 적절한 형태로 응답한다.

자료형 예) 문자열(HTML) , 배열(JSON), 객체(JSON)

 

send() 메서드 예

 

// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// request 이벤트 리스너를 설정합니다.

app.use(function (request, response) {

// 데이터를 생성합니다.

var output = [];

for (var i = 0; i < 3; i++) {

output.push({

count: i,

name: 'name - ' + i

});

}

 

// 응답합니다.

response.send(output);

});

 

// 서버를 실행합니다.

app.listen(52273, function () {

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

});

//response.send()메서드 앞에 status() 메서드를 사용하면 상태 코드를 전달할 수 있다.

 

)

// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// 미들웨어를 설정합니다.

app.use(function (request, response, next) {

// 응답합니다.

response.status(404).send('<h1>ERROR</h1>');

});

 

app.listen(52273, function () {

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

});

 

기본요청메서드

request객체의 속성과 메서드

params 라우팅 매개변수를 추출한다.

query 요청 매개 변수를 추출한다.

headers 요청헤더를 추출한다.

header() - 요청 헤더의 속성을 지정 또는 추출한다.

accepts(type) - 요청 헤더의 Accept 속성을 확인한다.

is(type) - 요청 헤더의 Content-Type 속성을 확인한다.


웹브라우저로 http요청을 하면 반드시 User-Agent 속성이 따라오므로 User-Agent 속성을 추출해보자.

// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// 미들웨어를 설정합니다.

app.use(function (request, response) {

// User-Agent 속성을 추출합니다.

var agent = request.header('User-Agent');

console.log(request.headers);

console.log(agent);

 

// 응답합니다.

// 상태 코드만 보낼 때는 sendStatus() 메서드를 사용합니다.

response.sendStatus(200);

});

 

// 서버를 실행합니다.

app.listen(52273, function () {

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

});

 이렇게 효청 헤더의 속성을 추출하면 웹브라우저에 따라 별도의 처리를 할 수 있다. 아래는 사용자의 웹브라우저가 크롬인지 확인하는 예제

 

// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// 미들웨어를 설정합니다.

app.use(function (request, response) {

// User-Agent 속성을 추출합니다.

var agent = request.header('User-Agent');

 

// 브라우저를 구분합니다.

if (agent.toLowerCase().match(/chrome/)) {

// 페이지를 출력합니다.

response.send('<h1>Hello Chrome .. !</h1>');

} else {

// 페이지를 출력합니다.

response.send('<h1>Hello express .. !</h1>');

}

});

 

// 서버를 실행합니다.

app.listen(52273, function () {

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

});

// 이것을 잘 활용하면 같은 경로로 접속해도 모바일과 데스크톱 페이지를 구분하는 것과 해킹에도 대비할 수 있다.

 


요청매개변수 추출


get요청 매개변수 추출

// 모듈을 추출합니다.

var http = require('http');

var url = require('url');

 

// 모듈을 사용합니다.

http.createServer(function (request, response) {

// 요청 매개변수를 추출합니다.

var query = url.parse(request.url, true).query;

 

// GET 요청 매개변수 출력

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

response.end('<h1>' + JSON.stringify(query) + '</h1>');

}).listen(52273, function () {

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

});

//요청매개변수는 json 형식으로 출력

 

post 요청 매개 변수 추출

// 모듈을 추출합니다.

var http = require('http');

var fs = require('fs');

 

// 모듈을 사용합니다.

http.createServer(function (request, response) {

if (request.method == 'GET') {

// GET 요청

fs.readFile('6-25.html', function (error, data) {

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

response.end(data);

});

} else if (request.method == 'POST') {

// POST 요청

request.on('data', function (data) {

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

response.end('<h1>' + data + '</h1>');

});

}

}).listen(52273, function () {

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

});

 

query 속성을 사용한 요청 매개변수 추출


// 모듈을 추출합니다.

var express = require('express');

 

// 서버를 생성합니다.

var app = express();

 

// 미들웨어를 설정합니다.

app.use(function (request, response, next) {

// 변수를 선언합니다.

var name = request.query.name;

var region = request.query.region;

 

// 응답합니다.

response.send('<h1>' + name + '-' + region + '</h1>');

});

 

// 서버를 실행합니다.

app.listen(52273, function () {

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

});


// 웹브라우저에 http://127.0.0.1:52273?name=rint&region=seoul 입력

// express 모듈의 request 객체와 response 객체를 살펴보았다. http 모듈과 크게 다르다는 점을 발견했을 것이다.

 

반응형

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

[node.js] 쿠키 & 세션 간단하게 정리  (0) 2017.05.25
[node.js] express 모듈2  (4) 2017.03.13
[node.js] 외부모듈  (2) 2017.03.11
[node.js] HTTP  (0) 2017.03.10
[node.js] 이벤트  (2) 2017.03.09

댓글