라우터란?
라우터는 클라이언트의 요청 경로(path)를 보고 이 요청을 처리할 수 있는 곳으로 기능을 전달해주는 역할을 한다. 이러한 역할을 라우팅이라고 하는데, 애플리케이션 엔드 포인트 (URI)의 정의, 그리고 URI가 클라이언트 요청에 응답하는 방식을 의미한다. 예를 들어, 클라이언트가 /users 경로로 요청을 보낸다면 이에 대한 응답 처리를 하는 함수를 별도로 분리해서 만든 다음 get()메소드를 호출하여 라우터로 등록할 수 있다.
라우터 사용하기
익스프레스에선 이러한 라우터를 미들웨어로서 제공하고 있다. 다음과 같은 순서로 라우터 미들웨어를 사용할 수 있다.
1. 라우터 객체 참조
2. 라우팅 함수 등록
3. 라우터 객체를 app 객체에 등록
이를 실제 코드로 표현하면 다음과 같다.
// 라우터 객체 참조
const router = express.Router();
// 라우팅 함수 등록
router.route('/process/login').get(...);
router.route('/process/login').post(...);
...
// 라우터 객체를 app 객체에 등록
app.use('/', router);
클라이언트에서 요청한 요청 경로에 따라 실행될 함수는 라우터(router) 객체를 사용해 등록한다.
router 객체의 route() 메소드를 통해 요청 경로를 지정할 수 있으며, get()이나 post() 등의 메소드를 호출하면 실행될 함수를 등록할 수 있다.
router.route(요청 경로).get(실행될 함수);
router.route(요청 경로).post(실행될 함수);
요청 패스를 라우터 객체에 등록할 때 사용하는 메소드엔 get(callback), post(callback), put(callback),delete(callback),all(callback) 등이 있다.
실제론 이렇게 하나의 파일 안에서 모든 라우팅 함수를 등록하는 것이 아니라, 각 경로 별로 라우팅 함수를 정의한 다음 그것을 하나의 파일로 묶어 모듈화시킨다.
Express/server.js
const indexRouter = require('./routes/index');
const userRouter = require('./routes/user');
app.use('/', indexRouter);
app.use('/user', userRouter);
Express/routes/index.js
const router = express.Router();
router.get("/", (req, res) => {
...
});
module.exports = router;
Express/routes/user.js
const router = express.Router();
router.get("/", (req, res) => {
...
});
router.get("/:userId", (req, res) => {
...
});
...
module.exports = router;
URL 파라미터 사용하기
URL 파라미터는 요청 파라미터(query string)와 달리 URL 주소의 일부로 들어간다.
위의 routes/user.js에서 /:userId는 /user/ 뒤에 오는 값을 파라미터로 처리하겠다는 의미이다.
이렇게 지정한 파라미터는 req.params 객체 안에 들어간다. 따라서 :userId으로 표시된 부분에 담겨 전달된 값은 req.params.userId 속성으로 접근할 수 있다. 이것을 바로 토큰(Token)이라고 부른다.
라우팅하는 과정에서 등록되지 않은 경로로 요청이 들어오는 것을 처리하는 방법은 다음 에러 처리에서 살펴보도록 한다.
'웹 > Node.js' 카테고리의 다른 글
[Node.js] Express 6: 쿠키와 세션 (Cookie & Session) (2) | 2021.02.22 |
---|---|
[Node.js] Express 5: 에러 처리(Error Handling) (0) | 2021.02.22 |
[Node.js] Express 3: 미들웨어(Middleware) (0) | 2021.02.20 |
[Node.js] Express 2: 요청 객체와 응답 객체 (req & res) (0) | 2021.02.20 |
[Node.js] Express 1: app 객체 (0) | 2021.02.19 |