Body-Parser 미들웨어

박성진·2021년 6월 7일
post-thumbnail

로그인 로직을 작성하는데 req.body가 계속 undefined로 나와서 애를 먹었다.
express문서에 따르면 미들웨어 없이 req.body에 접근하는 경우에는 기본적으로 undefined가 설정되어 있으므로 bodyParser과 같은 미들웨어를 사용하여 요청 데이터 값에 접근해야 한다고 나와있다.
이 문제를 해결하기 위해서는 2가지의 방법을 사용할 수 있다.
1. bodyParser.json()사용
2. express.json()사용

body-Parser 미들웨어를 사용하지 않은 경우

// Login.js
Loign: (req, res) => {
  console.log('req.body:'req.body) // req.body: undefined
}
// console에 undefined가 찍히게 된다.

bodyParser.json() (expressjs 4.16이전 버전에서 사용)

// 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가 나오게 된다.

express 4.16이후 버전이라면

// 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가 빌트인 되었기 때문에 별도의 설치 없이 위와 같이 사용 가능합니다.

urlencoded() 메소드는 무엇일까?

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?

0개의 댓글