(Node.js 환경에서 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 인기 있는 프레임워크)
Express로 구현한 서버가 http 모듈로 작성한 서버와 다른 점
- 미들웨어 추가가 편리하다
- 자체 라우터를 제공한다
- 메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것을 라우팅(Routing)이라고 합니다.
- 클라이언트는 특정한 HTTP 요청 메소드나(GET, POST 등)
서버의 특정 URI(또는 경로)로 HTTP 요청을 보냅니다.- 라우팅은 클라이언트의 요청에 해당하는 메소드와 Endpoint에 따라 서버가 응답하는 방법을 결정하는 것입니다.
순수한 node.js 코드
const requestHandler = (req, res) => { if(req.url === '/lower') { if (req.method === 'GET') { res.end(data) } else if (req.method === 'POST') { req.on('data', (req, res) => { // do something ... }) } } }
Express 프레임워크 자체에서 라우터기능 활용
const router = express.Router() router.get('/lower', (req, res) =>{ res.send(data) }) router.post('/lower', (req, res) =>{ // do something })
[미들웨어를 사용하는 상황]
- 모든 요청에 대해 url이나 메소드를 확인할 때
- POST 요청 등에 포함된 body(payload)를 구조화할 때(쉽게 얻어내고자 할 때)
- 모든 요청/응답에 CORS 헤더를 붙여야 할 때
- 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때
* POST 요청 등에 포함된 body(payload)를 구조화할 때( body 얻기 )
app.use(express.json({strict: false}))
기본값이 true로 설정 되있으며, true로 설정되어있으면 배열과 객체만 허용하거나 사용하지 않도록 설정합니다.
비활성화되면 JSON.parse가 허용하는 모든 것을 허용합니다
primitive data type 도 parsing 해주도록 설정
req.body 메소드로 얻을 수 있다.
* 모든 요청/응답에 CORS 헤더를 붙일 때
순수 node.js 코드에 CORS 헤더를 붙이려면, 응답 객체의 writeHead 메소드 등을 이용합니다.
이런 메소드를 이용하더라도 Access-Control-Allow-* 헤더를 매번 재정의해야 합니다
그뿐만 아니라, OPTIONS 메소드에 대한 라우팅도 따로 구현해야 합니다.
cors 미들웨어 사용
const cors = require('cors') app.use(cors()) // 모든 요청에 대해 CORS 허용
JavaScript 생태계에서 인기 있는 프레임워크인 MongoDB, Express, React, Node를 지칭하는 말
body-parser 부분이 express 버전이 업그레이드 되면서 내장되어 사용을 하지 않고
body를 얻을 수 있게 되었는데 처음보는 용어들이 많다보니
자료를 찾고 검색하는데 시간을 꽤나 소요했었다.
요즘은 코드를 쓰다가 막히면 지레 겁먹고 코드를 쓰지 않는데 이 부분을 고쳐야겠단 생각이 든다