[Node.js] #7 Routing

✨New Wisdom✨·2020년 7월 26일
5

📗 Nodejs 📗

목록 보기
8/20
post-thumbnail

이 노트는 "Nodejs 교과서"를 공부하면서 기록되었다.

Routing

라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말한다.
우리가 익스프레스를 사용하는 이유 중 하나도 익스프레스를 이용하면 라우팅을 깔끔하게 해주기 때문이다!


Middleware

미들웨어란 클라이언트에게 온 요청을 보내기 위해 응답하려는 중간에 목적에 맞게 처리를 하는 것이다. express 프레임워크 내에서는 중간 처리 목적의 소프트웨어이다.
미들웨어는 코드에 적인 순차대로 실행되며 다음 미들웨어를 실행시키기 위해 next()를 사용하여 순차적 처리를 실행한다.


📃 App.js

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
...
app.use('/', indexRouter);
app.use('/users', usersRouter);

app.use()는 익스프레스 앱이 사용할 미들웨어들을 명시할 수 있다.
여기서는 app.use()에 indexRouter와 userRouter를 사용한다고 명시해 놓았다. 각각 '/', '/user'요청이 올 때 이 라우터들을 호출한다.

여기서 use()메소드가 아닌 HTTP의 메소드(GET, POST, PUT, DELETE)들을 사용하여 각 HTTP 메소드에 대한 요청 처리를 할 수 있다.

app.use('/', function(req, res, next) {
  console.log('/ 주소로 들어오는 모든 HTTP 메소드 요청을 처리합니다.');
  next();
});
app.get('/', function(req, res, next) {
  console.log('/ 주소로 들어오는 GET 메서드 요청을 처리합니다.');
  next();
});
app.post('/data', function(req, res, next) {
  console.log('/ 주소로 들어오는 POST 메서드 요청을 처리합니다.');
  next();
});

Routes 뜯어보기🔨

📃 routes/index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
  • express.Router()로 router 객체를 만들었다.
  • router도 HTTP 메서드들에 대한 요청을 처리할 수 있다.
  • 이 라우터는 '/' 주소로 들어오는 get 요청에 대한 처리를 정의해 놓았다.
  • 콜백 함수를 통해 요청(req), 응답(res) 객체를 사용할 수 있다.

또한 라우터 하나에 여러개 미들웨어를 장착할 수도 있다.

router.get('/', middleware1, middleware2, middleware3);

next 함수

현재의 라우터에서 다음 라우터로 넘어가고자 할 때는 이 next() 함수를 사용하여 다음 라우터로 넘어갈 수 있다.
이는 현 라우터에 연결된 나머지 미들웨어들을 건너 뛰고 다음 라우터 처리로 넘어감이 가능하다.

router.get('/', function(req, res, next) {
  next('route');
}, function(req, res, next) {
  console.log('실행되지 않습니다');
  next();
}, function(req, res, next) {
  console.log('실행되지 않습니다');
  next();
});

router.get('/', function(req, res) {
  console.log('실행됩니다');
  res.render('index', { title:'Express' });
});

첫 번째 라우터의 첫 번째 미들웨어에서 next('route') 호출을 하면 첫 번째 라우터의 두 번째, 세 번째 미들웨어는 건너 뛰게 되고, 주소와 일치하는 다음 라우터로 넘어간다.

req

만약 주소에 파라미터 값이 넘어 올 때, 파라미터 값을 ':파라미터 값' 형식으로 처리 가능하다.

router.get('/users/:id', function(req, res) {
  console.log(req.params, req.query);
});

이 경우는 주소로 들어온 'id'를 조회하려면 req.param 객체를 조회하면 된다.(req.param.id)

res

라우터 처리에 에러가 발생하지 않았다면, 라우터는 응답을 보내 주어야 한다.
응답 메서드는 send, sendFile, json, redirect 등이 있다.

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

0개의 댓글