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®ion=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 |
댓글