
로그인 로직을 작성하는데 req.body가 계속 undefined로 나와서 애를 먹었다.
express문서에 따르면 미들웨어 없이 req.body에 접근하는 경우에는 기본적으로 undefined가 설정되어 있으므로 bodyParser과 같은 미들웨어를 사용하여 요청 데이터 값에 접근해야 한다고 나와있다.
이 문제를 해결하기 위해서는 2가지의 방법을 사용할 수 있다.
1. bodyParser.json()사용
2. express.json()사용
// Login.js
Loign: (req, res) => {
console.log('req.body:'req.body) // req.body: undefined
}
// console에 undefined가 찍히게 된다.
// body-parser 모듈 설치
npm install body-parser --save
// App.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
// Login.js
Login: (req, res) => {
console.log('req.body:'req.body) // req.body: {id:kimcoding, password: 1234}
}
// body-parser모듈을 사용하면 정상적으로 req.body가 나오게 된다.
// App.js
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended: false}));
// Login.js
Login: (req, res) => {
console.log('req.body:'req.body) // req.body: {id:kimcoding, password: 1234}
}
// 4.16 이후 버전으로는 body parser가 빌트인 되었기 때문에 별도의 설치 없이 위와 같이 사용 가능합니다.
app.use(express.urlencoded({extended: false}));
app.use(bodyParser.urlencoded({extended: false}));
extend 옵션을 false로 하면 querystring library를 사용하게 되고, true로 설정하면 qs library를 사용하여 URL-encoded data를 파싱한다.
true일때, false일 때의 예시는 다음 stackflow에 쉽게 나와있다.
What does 'extended' mean in express?