Express
Express는 Node.js 환경에서 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 프레임워크이다.
Express는 Router와 Middleware를 제공한다.
Router
라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말합니다. - Express 공식문서
Express 라우터는 다음과 같은 코드로 작성한다.
app.METHOD(PATH, HANDLER)
METHOD에 자신이 원하는 method(GET,POST 등)를 설정하고, method에 따라 다른 경로(PATH)를 설정한다.
그리고 라우트가 일치할 때 HANDLER 함수를 호출한다.
라우트 사용 예시
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
MiddleWare
MiddleWare란 request를 받은후 response를 보내기전에 중간중간에 거쳐가는 함수를 말한다.
필요한 기능을 더하거나 불필요한 부분을 빼는 등의 역할을 수행한다.
Express에서 서버를 구축할 때 MiddleWare는 다음과 같은 상황에서 주로 사용한다.
⓵ request에 포함된 body(payload)를 구조화 할 때
⓶ 모든 요청/응답에 CORS 헤더를 붙여야 할 때
⓷ 모든 요청에 대해 url이나 메서드를 확인할 때
⓸ 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때
⓵ Body 구조화
Express에 내장된 json 메서드를 사용하면 request body를 쉽게 빼내올 수 있다.
const jsonParser = express.json();
// 생략
app.post('/api/users', jsonParser, function (req, res) {
})
⓶ 모든 요청/응답에 CORS 헤더를 붙일 때
cors middleware를 사용하면 모든 요청에 CORS헤더를 붙일 수 있다.
const cors = require('cors');
// 생략
app.use(cors());
헤더 세부내용을 수정하고 싶으면 cors 함수에 인자를 전달한다.
특정 요청에만 CORS 헤더를 붙이고 싶으면 use가 아닌 특정 메서드에 인자로 cors함수를 전달한다.
const cors = require('cors');
const corsOptions = {
origin: 'http://example.com',
optionsSuccessStatus: 200
}
app.use(cors(corsOptions));
// OR
app.get('/products/:id', cors(corsOptions), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for only example.com.'})
})
⓷ 모든 요청에 대해 url이나 메서드를 확인할 때
위와 같이 새로운 MiddleWare 함수를 만들고 인수로 받은 request의 method와 url을 콘솔로 출력할 수도 있다.
중요한 것은 세번째 인자인 next 함수를 사용하지 않으면 다음 middleware 단계로 넘어가지 않기 때문에 꼭 사용해야 한다.
⓸ 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때
HTTP 요청에서 토큰이 있는지를 판단하여, 이미 로그인한 사용자일 경우 성공, 아닐 경우 에러를 보내는 예제이다.
app.use((req, res, next) => {
if(req.headers.token){
req.isLoggedIn = true;
next();
} else {
res.status(400).send('invalid user')
}
})
Express server 실습
페어와 함께 어제 node.js의 http 모듈로 만들어본 서버를 Express로 리펙터링 해보았다.
복잡하게 받던 request body는 .json 함수를 사용하여 편하게 받을 수 있었고,
직접 객체로 만들어서 전달하던 CORS 헤더는 cors모듈을 사용하여 편하게 작성했다.
* cors 함수에 옵션을 전달해서 기존에 204 상태코드가 나오던 것을 200으로 바꾸어보았다.(post메서드는 201)
'코드스테이츠' 카테고리의 다른 글
2/9 일일정리 myagorastates server (0) | 2023.02.09 |
---|---|
2/8 일일정리 Statesairline Server (0) | 2023.02.08 |
2/6 일일정리 CORS, node server 실습 (0) | 2023.02.06 |
2/3 일일정리 StatesAirline Client (0) | 2023.02.03 |
2/2 일일정리 React 데이터흐름과 Effect Hook (0) | 2023.02.02 |
댓글