1. Routing (라우팅)
라우팅은 URI 및 특정 HTTP 요청 방법에 대한 클라이언트 요청에 응답하는 방식을 나타낸다.
예를 들어, GET 요청을 처리하려면 app.get()을 Post 요청을 처리하고 싶다면 app.post()를 사용하면 된다.
혹시 app.all()을 사용해 모든 HTTP 메서드를 처리하고, app.use()를 통해 미들웨어를 콜백 함수로 지정할 수 있다.
2. Router (라우터)
라우팅 할 수 있도록 도와주는 메서드를 라우터라고 하며,
라우터는 지정된 경로에 대한 요청을 수신할 때 호출되는 콜백함수와 HTTP 메서드를 지정한다.
즉, 지정된 경로 및 메서드와 일치하는 요청을 수신하고, 일치하는 것을 감지하면 지정된 콜백 함수를 호출한다.
app.get('/', (req, res) => {
return console.log('hello')
})
쉽게 말하면 위 코드에서 app.get 이 라우팅, 라우터 부분이라고 볼 수 있다.
3. Router 활용
1) 라우팅 관리
라우터를 사용하면 라우팅을 깔끔하게 관리할 수 있다.
ex)
app
.route('/test')
.get((req, res, next) => {
res.status(200).send('')
})
.post((req, res) => {
res.status(200).send('')
})
라우터는 체이닝이 가능하기 때문에 경로를 다시 입력하지 않고도 여러 가지 라우팅을 연결할 수 있다.
그러나 코드가 복잡할 경우 가독성이 떨어지게 된다.
이때 익스프레스에서 제공하는 라우터 분리 방법을 사용하면 보다 깔끔하게 코드를 작성할 수 있다.
//router.js
const router = express.Router();
router.get('/', (req, res) => {
res.statue(200).send('hello!');
})
export default router;
//app.js
import router form './router.js'
app.use('/', router);
위 예시처럼 router를 다른 파일에서 지정한 후, app.js에서 불러와서 사용할 수 있다.
사용자가 '/'경로로 들어갔을 때, router 가 실행되면서 'hello'가 전달된다.
이를 활용해 같은 경로마다 라우터로 미들웨어를 묶어줄 수도 있다.
//router.js
const router = express.Router();
router.get('/', (req, res) => {
res.statue(200).send('hello!');
})
router.post('/', (req, res) => {
res.send('post page')
})
export default router;
//app.js
import router form './router.js'
app.use('/posts', router);
이런 식으로 '/posts' 경로에 있는 미들웨어들을 라우터로 묶어서 사용하면
각 메서드마다 '/posts'와 같은 경로를 하나하나 적지 않아도 된다.
2) next('route')
next('route')는 라우터에 연결된 나머지 미들웨어들을 건너뛰고 싶을 때 사용한다.
app.get('/', (req, res, next) => {
console.log('처음');
next('route');
}, (req, res, next) => {
console.log('처음_2')
});
app.get('/', (req, res, next) => {
console.log('두번째')
})
위 예시의 경우 '처음'에서 next('route')를 사용했기 때문에 '처음_2' 미들웨어를 건너뛰고,
'두 번째' 미들웨어를 실행한다.
3) router 매개변수
라우터 주소에는 정규표현식을 비롯한 특수한 패턴을 사용할 수 있는데,
이를 라우트 매개변수라고 부른다.
const router = express.Router();
router.get('/user/:id', (req, res, next) => {
console.log(req.params.id);
});
// url: localhost:8080/user/jaeeun
//{ id: 'jaeeun' }
url 부분에 있는 :id 부분이 매개변수 부분으로, req.params.id로 조회가 가능하다.
const router = express.Router();
router.get('/user/:id', (req, res, next) => {
console.log(req.query);
});
// url: localhost:8080/user/jaeeun/?age=25
//{ age: '25' }
앞서 봤던 예시처럼 주소에 쓴 id를 조회하는 것도 가능하지만,
위 예시처럼 쿼리스트링을 사용하는 것도 가능하다.
?를 입력한 후 id=value를 넣어주면 해당 값을 query로 조회할 수 있다.