Rubberduck-Debugging

nodeJs routing 본문

개발자/20181127 교육과정

nodeJs routing

P缶 2019. 1. 9. 10:02

1. 라우팅 : 클라이언트의 요청을 미들웨어로 분배

   라우팅 종료
   -요청 경로
   -요청 메서드
   -요청경로 + 요청 메서드


*메서드 별 라우팅 함수  (path : 요청 경로  , callback : 요청 담당 미들웨어)
app.all(path, callback [, callback …])
app.get(path, callback [, callback …])
app.post(path, callback [, callback ...])
app.put(path, callback [, callback ...])
app.delete(path, callback [, callback …])


*메서드 경로 별 라우팅 
app.get('/', function (req, res) {
 res.send('GET request, /');
});
app.delete('/', function(req, res) {
 res.send('DELETE method');
});
app.put('/item/1', function(req, res) {
 res.send('PUT method, /item/1');
});
app.all('/all', function(req, res) {
 res.send('모든 HTTP 메소드, /all');
});


동적 파라미터
-동적 파라미터
   app.get(‘/user/:item’, [Callback]);
-적용 요청 경로
   /user/1234
   /user/abcd
-파라미터값 얻기
   req.params.item
-다수의 동적 파라미터 사용 가능


라우팅과 요청 파라미터
app.get('/user/:id', function (req, res) {
 var userId = req.params.id;
 ...
});
app.get('/movies/:movieId/:actor', function (req, res) {
 var movieId = req.params.movieId;
 var actor = req.params.actor;
 ...
});


경로에 정규식 사용하기
 ? : 문자 존재하거나 생략
 + : 1번 이상 반복
 * : 임의의 문자

정규식 사용 라우팅
정규식 사용 라우팅
// /abcd, /acd
app.get('/ab?cd', function(req, res) {})

// /abcd, /abbcd, /abbbcd
app.get('/ab+cd', function(req, res) {})

// abcd, abxcd, abRABDOMcd, ab123cd
app.get('/ab*cd', function(req, res) {})

// /abe, /abcde
app.get('/ab(cd)?e', function(req, res) {})

express의 route 함수
app.route(‘/book')
 .get(function(req, res) {
 res.send('Get a random book');
 })
 .post(function(req, res) {
 res.send('Add a book');
 })
 .put(function(req, res) {
 res.send('Update the book');
 });


라우팅 로직 별도 분리 ( router.js )
var express = require(‘express’);
var router = express.Router();
router.get('/hello', sayHello);
router.get('/howAreYou/:who', sayThankYou);
module.exports = router;

라우팅 로직 설정 ( app.js ) 
app.use(require('./router'));


상대 경로 요청 처리 가능
 /greeting/hello 경로의 요청
app.use('/greeting', require('./greetingRouter’));

 greetingRouter 의 라우팅 코드
router.get('/hello', sayHello);   
 /eat/cooking 경로의 요청 담당 라우팅 모듈
app.use(‘/eat’, require('./eatingRouter’));

 eatingRouter 의 라우팅 코드
router.get('/cooking', cook);


에러 처리 미들웨어
-Express 에러 처리 방법
 --미들웨어 내부에서 처리
     각각 미들웨어에서 에러 처리
     에러 처리 로직이 제각각
     에러 처리 코드 중복
 --에러 처리 미들웨어에게 위임
     일관된 에러 처리 가능

에러 파라미터
app.use(function(err, req, res, next) {
 res.status(500).send(‘에러 발생!');
});

에러 처리 미들웨어로 에러 전달
app.use(function(req, res, next) {
 var error = new Error(‘에러 메세지’)
 error.code = 100;
 return next(error);
});

환경 별 에러 처리 코드
if (app.get('env') === 'development') {
 app.use(function(err, req, res, next) {
 res.end(err.stack);
 });
}
else {
 app.use(function(err, req, res, next) {
 res.status(err.code || 500);
 res.end('잠시 후 다시 시도해주세요');
 });
}




-----------------------------------------------------------
실습_1
var express = require('express');
var router = express.Router();

router.get('/hello', sayHello);
router.get('/howAreYou/:who', sayThankYou);

function sayHello(req, res) {
   res.send('Hello Router');
}

function sayThankYou(req, res) {
   var who = req.params.who;
   res.send('Fine Thank You ' + who + " And  you?");
}

module.exports = router;


실습_2  (app.js)
var express = require('express');
var app = express();

app.use(require('./greetingRouter'));

app.listen(3000);

//
----------------------------------------------------------
실습_2 (err.js)
var express = require('express');
var app = express();

app.use(require('./greetingRouter'));

app.listevar express = require('express');
var app = express();

app.get('/:value', work);
app.use(errorHandler);

app.listen(3000);

function work(req, res, next) {
   var val = parseInt(req.params.value);
   
   // 입력 파라미터 체크
   if ( ! val ) {
      var error = new Error('입력값이 숫자가 아닙니다.')
      next(error);
      return;
   }
   
   res.send('Result : ' + val);
}

function errorHandler(err, req, res, next) {
    res.send('Error 발생');
}n(3000);


'개발자 > 20181127 교육과정' 카테고리의 다른 글

controller 배열 자바스크립트에서 받기  (0) 2019.01.18
mongodb 시작  (0) 2019.01.14
nodeJS express  (0) 2019.01.08
nodeJS get, post , 실습  (0) 2019.01.07
nodeJS http  (0) 2019.01.07