Programming/웹프로그래밍

[NodeJs] 외부모듈활용 - Express를 활용해 간단한 Framework 만들기. (Router/GET/POST) (2/3)

쌍쌍바나나 2016. 3. 17. 16:44
반응형
router 미들웨어 (길잡이를 해주기 때문에 이름이 router입니다.)
- 요청 메서드와 url에 따른 분기
- 개별 함수를 통한 1:1 작업 분화
- app.use()라는 것을 app.get()처럼 표현.. ?
- router.get()이 많이 나온다구...?
- use에서 if 문으로 분기를 나눠서 처리하는게 너무 많은거야.. 그래서 router로 만들어보자. use함수 제조기를 router라고 만들자.
- 필요에 의해 새로운 router 생성
- 별도의 context 생성의 의미

var router = new Router();
router.get('/plus', function() {});
router.get('/minus', function() {});
app.use(router);

있었는데, 살아지고
Express 4.x부터 지금은 app.get()에 암묵적으로 기본 router 미들웨어에 추가되었음.
app.get('url', function(req, res){}); post, put, delete, all 
 
router를 등록하면 1차적으로 calendar에 관련된 이벤트를 처리하고 그 이벤트 안에서도 2차적인 events를 처리하는 함수를 정의.
하위 context를 만들어낼때 사용한다. calendar의 하위 context.
이렇게 하면 /calendar/events/, calendar/normal 의 이벤트를 처리할 수 있다.

예제 )
var http = require('http');
var express = require('express');

var app = express();
var router = express.Router();

app.get('/', function(req, res) {
res.send('<h1>index page</h1>');
});

router.get('/events', function(req, res){ 
console.log('events');
res.send('<h1>events</h1>');
});
router.get('/normal', function(req, res){ 
console.log('normal');
res.send('<h1>normal</h1>');
});
app.use('/calendar', router);

http.createServer(app).listen(8080, function() {
console.log('running on 8080.');
});

Parameter 전달

- GET 방식
    - request.param('key') : value 
    - request.query.key : value
※ POST 방식과 동일한 코드를 하기 위해서는 request.param('key')가 더 올바르다.(?)


예제 )

app.get('/', function(req, res) {

console.log(req.query);

console.log(req.param);

res.send('<p>id:' + req.query.id + "</p><p>"

+ req.param('pwd') +"</p>");

}); 


-  POST 방식
    - bodyParaser 미들웨어 추가 설치
    - npm install body-parser

예제 )

app.use(bodyParser.urlencoded({extended: false}));

app.post('/', function(req, res) {

console.log(req.query);

console.log(req.param); // function

res.send('<h1>POST</h1><p>id:' + req.param('id') + "</p><p>"

+ req.param('pwd') +"</p>");

});



※ GET과 POST의 함수 Body가 동일한 경우에는 app.all('url', function(){}); 으로 해도 상관 없습니다.

반응형