body-parser는 node.js의 parsing middleware다.
request로 들어오는 사용자 요청을 기존의 복잡한 방식없이
req.body
으로 접근할 수 있게 한다.
req
를 처리하고 위해서는 buffer를 파싱하는 과정이 필요했다.let express = require("express")
let app = express()
app.post("/", (req, res)=>{
let body = []
request.on('data', (chunk) => {
body.push(chunk)
})
.on('end', () => {
body = Buffer.concat(body).toString();
body = JSON.parse(body)
console.log(body)
});
})
//스트림하는 데이터들을 처리하기 위해 request.on을 사용하였고,
//"data"이벤트에서 사용되는 chunk는 그 값이 Buffer의 형식으로 들어오게된다.
//또 "end"이벤트에서 버퍼들을 다시 JS 객체로 파싱하는 과정을 거치고 나서야
//비로소 body라는 변수에 담긴 데이터를 JS 객체로 사용할 수 있게 된다.
req.body
로 바로 데이터에 접근할 수 있다.let express = require("express")
let parser = require("body-parser")
let app = express()
app.use(parser.json())
app.post("/", (req, res)=>{
console.log(req.body)
})
//app.use(parser.json())을 이용해 JSON형식을 자바스크립트 객체로 파싱해주고있다.
//app.post 내에서는 req.body로 데이터에 접근이 가능하다.
엄청나게 간단해졌다.
하지만 Express v4.16.0 기준으로 body-parser 미들웨어를 따로 설치하지 않아도 사용할 수 있게 되었다. 출처: [ express 공식문서]
사용 방법은 아래와 같다.
let express = require("express")
let app = express()
app.use(express.json())
app.post("/", (req, res)=>{
console.log(req.body)
})
//body-parser를 사용하기 전과 비교해보자. 크....
req.on
을 더 이상 사용할 수 없다!!!!app.use(parser.json())
부분에서 요청한 데이터가 파싱이 된다.app.post()
에서는 req.on
을 사용하더라도 받을 데이터가 이미 파싱되고 난 이후이기 때문에 아무런 이벤트도 처리할 수 없게 되는 것이다.req.on
안에 코드들이 작동을 안하냐며 울부짖었던 기억이....req.on
을 사용할 필요가 없게 되었다. 불편쓰.