Express Routing
라우팅은 URI(또는 경로) 및 특정 HTTP 요청 메소드(GET, PUT, POST, DELETE 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방식이다. 즉, 클라이언트가 특정 HTTP 메소드와 URI를 특정해서 서버에 요청하면 서버는 라우팅을 통해 요청에 맞는 응답을 결정 후 반환하게 된다.
Express 프레임워크는 자체적인 라우터 기능을 제공한다. 각 라우터는 하나 이상의 핸들러 함수를 가지게 된다. 라우트가 일치할 때 전달 받은 핸들러 함수가 호출된다.
add.METHOD(PATH, Handler);
- app은 express의 인스턴스다.
- METHOD는 HTTP 메소드다.
- PATH는 서버의 경로
- Handler는 라우트가 일치하는 경우 호출되는 콜백 함수
Express 라우터에서 지원하는 HTTP 메소드
get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search 및 connect.
간단한 라우터 예제
app.get('/', (req, res)=>{
res.send("GET METHOD is requested");
})
app.post('/', (req, res)=>{
res.send("POST METHOD is requested");
})
app.put('/data' ,(req, res)=>{
res.send("PUT METHOD is requested");
})
app.delete('/data' ,(req, res)=>{
res.send("DELETE METHOD is requested");
})
app.all()
express에서도 특수한 메소드다. 모든 HTTP 요청 메소드에 대해 미들웨어 함수를 로드한다.
app.all('/secret', (req, res, next)=>{
console.log("Accessing to the secret position ...");
next();
})
req.params VS req.query
클라이언트가 요청한 URI를 파싱해서 value를 받아올 때 2가지 방법을 사용할 수 있다. 패스 파라미터를 사용하는 params와 query가 그것이다.
req.params
사용자의 요청 URI가 패스 파라미터인 경우
URI : http://localhost:3000/value
express 라우터 PATH에는 :파라미터로 설정하고, req.params로 값을 받아올 수 있다. 라우터상에서 지정한 value가 키값이 되고 실제 클라이언트의 요청이 value가 된다.
router.get('/:name', (req,res)=>{
console.log(req.params) // { name : value }
})
req.query
클라이언트가 일반적인 쿼리를 던지는 경우 query.parser의 결과값인 쿼리 문자열을 담고 있는 속성이다. 만약 query.parser이 비활성화되면 req.query 오브젝트에는 빈 객체가 담기게 된다.
URI : http://localhost:3000?value=123
?query=value 형식으로 클라이언트가 쿼리를 요청하게 되면 req.query로 값을 받아올 수 있다. 쿼리는 문자열이 위치하기 때문에 필요에 따라 toString() 함수를 사용해서 변환해줘야 한다.
router.get('/', (req,res)=>{
console.log(req.query) // { value : 123 }
})
프로젝트에서 라우팅
메인 페이지 app.js에서 라우팅할 라우터를 생성해준다. 생성된 라우터를 전역에서 app.use()를 통해 적용해준다.
const express = require('express');
const app = express();
// 라우터 생성
const aRouter = require('./router/aRouter');
const bRouter = require('./router/bRouter');
const cRouter = require('./router/cRouter');
// 라우터 사용
app.use('/a/',aRouter);
app.use('/b', bRouter);
app.use('/c', cRouter);
다음 단계로 컨트롤러를 객체 형식으로 생성한 다음, 라우터와 연결해준다.
컨트롤러 aController.js
객체 내부에 라우터에서 사용할 함수들을 작성해준다. 컨트롤러 모듈을 export 해준다.
module.exports = {
findAll: (req, res) => {
res.json("This is A Controller");
}
};
aRouter.js
express.Router()를 인스턴스화 해주고, router의 GET 함수에 컨트롤러에서 작성한 함수를 콜백함수로 넘겨준다. 마지막으로 router를 export 해준다.
const { findAll } = require('../controller/aController');
const express = require('express');
const router = express.Router();
router.get('/', findAll);
module.exports = router;
최종적으로 라우팅이 되는 흐름은 다음과 같다.
Reference
'Programming' 카테고리의 다른 글
[Web Server] fetch API 사용하는 방법 (0) | 2022.05.26 |
---|---|
[Node.js] Express 미들웨어 함수 (0) | 2022.05.26 |
[Programming] 웹서버(Web)와 웹 어플리케이션 서버(WAS) 차이점 The difference between Web Server and Web Application Server (0) | 2022.05.25 |
[Programming] CORS란? (preflight, OPTIONS 메소드?) (0) | 2022.05.25 |
[React] Effect HOOK API useEffect 사용하는 방법 (0) | 2022.05.25 |
댓글