body-parser
npm install body-parser --save
를 하여 body-parser를 설치하여 준다.
이를 사용하는 이유는 클라이언트 POST request data의 body로부터 파라미터를 편리하게 추출하기 위해서이다. 프론트엔드에서 form등의 값을 가져올 때 undefined error를 마주하게 된다. req.body를 사용해서 가져오게 되면, body-parser를 사용하지 않는다면 기본값으로 undefined가 설정되어 있어서 그러한 오류가 난다.
(Express v4.16.0 기준)express.js도 빌트인 body parser가 되어있다. 그래서 express.json, express.urlencoded도 가능하다.
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
클라이언트로 부터 받은 http 요청 메시지 형식에서 body데이터를 해석하기 위해서 express.json() 와 express.urlencoded()로 처리가 필요하다.
1) bodyParser.urlencoded()
body-parser 모듈을 사용할 때 아무 옵션을 주지 않는다면 body-parser deprecated undefined extended: provide extended option이라는 문구가 뜬다. 이는 node.js에 기본으로 내장된 queryString을 가져올 것이냐, 가져오지 않을 것이냐는 말이다.
- extended: false : NodeJs에 기본으로 내장된 querystring모듈을 사용한다.
- extended: true : 추가로 설치가 필요한 qs모듈을 사용한다.
2) bodyParser.json()
form으로 가져오는 값은 x-www-form-urlencoded형태이다. 이를 가져올려면 urlencoded()를 사용해서 가져와야 하고, json은 json형태의 값만 가져올 수 있다.
cors
const cors = require("cors");
app.use(cors())
별도의 처리 없이 app.use(cors())를 하게 되면 모든 도메인에서 제한 없이 해당 서버에 요청을 보내고 응답을 받을 수 있다.
corsOptions 변수에 자신이 허용할 도메인을 추가하고 app.use(cors(corsOptions))를 하게 되면 해당 도메인은 제한 없이 해당 서버에 요청을 보내고 응답을 받을 수 있다.
app.use(cors(corsOptions));