Back Ground

Node - Express 미들웨어 body-parser 본문

Javascript/Node.js

Node - Express 미들웨어 body-parser

Back 2019. 2. 26. 05:40



body-parser


요청의 본문을 해석해주는 미들웨어이다.

보통 데이터나 AJAX요청의 데이터를 처리한다.


app.js

1
2
3
4
5
6
...
var bodyParser = require('body-parser');
...
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
...
cs


그런데 이전에 express미들웨어에서의 app.js에서는 body-parser를 사용하지 않았다.

익스프레스 4.16.0버전 부터 body-parser의 일부 기능이 익스프레스에 내장되었기 때문이다.




그래서 body-parser를 설치하지 않고도 다음과 같이 할 수 있다.

1
2
app.use(express.json());
app.use(express.urlencoded( {extended : false } ));
cs


단, body-parser가 필요한 경우도 있다

body-parser는 

JSON과 URL-encoded 형식의 본문 외에도 

Raw, Text형식의 본문을 추가로 해석할 수 있다.



Raw는 본문이 버퍼 데이터일 때, Text는 본문이 텍스트 데이터일 때  해석하는 미들웨어이다.

서비스에 적용하고 싶다면 body-parser를 설치한 후 다음과 같이 추가한다.


1
2
app.use(bodyParser.raw());
app.use(bodyParser.text());
cs





JSON은 JSON 형식의 데이터 전달 방식이고,

URL-encoded는 주소 형식으로 데이터를 보내는 방식이다.


urlencoded 메서드를 보면 

1
{ extended: false }
cs

 라는 옵션이 들어있다.


이 옵션이 false면 노드의 querystring 모듈을 사용하여 쿼리스트링을 해석하고,
true면 qs 모듈을 사용하여 쿼리스트링을 해석한다.


모듈을 사용하여 쿼리스트링을 해석하고, true면 qs모듈을 사용하여 쿼리스트링을 해석한다.

qs모듈은 내장 모듈이 아니라 npm패키지이며,

querystring모듈의 기능을 조금 더 확장한 모듈이다.



이전에는

POST와 PUT요청의 본문을 전달 받으려면 req.on('data')와 req.on('end')로 스트림을 사용해야 했었다.

https://backback.tistory.com/327




body-parser를 사용하면 그럴 필요가 없다.

이 패키지가 내부적으로 본문을 해석해 req.body에 추가해준다.




예를 들어 JSON 형식으로 { name: 'backback' , book: 'nodejs' }를 본문으로 보낸다면 req.body에 그대로 들어간다.

- URL-encoded 형식으로 name=backback&book=node.js를 본문으로 보낸다면

- req.body{ name : 'backback' , book: 'nodejs' }가 들어간다.




body-parser가 모든 본문을 해석해주는 것은 아니다.

multipart/form-data 같은 폼을 통해 전송된 데이터는 해석하지 못한다.






출처 : node.js 교과서


Comments