body-parser
는 클라이언트 POST 요청 데이터의 body로 부터 파라미터 값의 추출을 편리하게 도와주는 미들웨어이다.
body-parser
를 이용하여 아래 코드와 같이 작성했다.
import * as express from 'express';
import { Request, Response } from 'express';
import * as bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.json());
app.post('/users', (req: Request, res: Response) => {
console.log(req.body);
});
body-parser
사용하지 않을 경우에는 아래 코드와 같다.
import * as express from 'express';
import { Request, Response } from 'express';
const app = express();
app.post('/users', (req: Request, res:Respones) => {
console.log(req.body);
});
크게 달라 보이지 않지만, console.log(req.body)
라인에서 undefined Error가 나온다.
그 이유는 req.body의 default value가 Undefined이기 때문이다.
그렇기에 body-parser
를 사용하면 해당 문제를 해결 할 수 있다.
body-parser
에는 urlencoded()
메소드가 있고, 그 안에는 {extended : boolean}
옵션이 있다. true값일 경우 qs library를 사용, false값일 경우 query-string library를 사용한다.
import * as qs from 'qs';
const result = qs.parse("person[name]=bobby&person[age]=3");
console.log(result);
// { person: {name: 'bobby', age: '3'} }
import * as queryString from 'query-string';
const result = queryString.parse("person[name]=bobby&person[age]=3");
console.log(result);
// {'person[age]': '3', 'person[name]': 'bobby' }
위의 두 코드의 결과를 보면 파싱하는 방법이 다르다는것을 볼 수 있다.
원하는 옵션 선택하면 될 것 같다.
이제는 express에서 v4.16.0 기준으로 body-parser
를 넣었다고 하니, 아래 코드와 같이 작성하면 될 것이다.
import * as express from 'express';
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended : true}));
[1분 패키지 소개] : body-parser를 소개합니다. 하지만, body-parser를 쓰지 마세요.
What does 'extended' mean in express 4.0?