body-parser의 필요성(undefined 에러 해결)
본문 바로가기

Backend/node.js

body-parser의 필요성(undefined 에러 해결)

body-parser

API즉 http request를 이용하는 req.body를 사용할때는 body-parser가 필요한데

내가원하는 형태의 데이터로 parse(가공) 해야하기때문에 반드시 필요함(parse는 compile에 속함)

또 express 문서에따르면

req.body
Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

req.body는 request body로 요청된 데이터를 의미하는데 기본적으로 undefined로 뜨게되서 미들웨어인 body-parser와 multer를 이용해야한다고함.(multer은 이미지등 파일업로드관련할때 필요할듯)

 

undefined 에러

 

사용예시

npm install body-parser
const app = require('express')()
const bodyParser = require('body-parser')
const multer = require('multer') // v1.0.5
const upload = multer() // for parsing multipart/form-data

app.use(bodyParser.json()) // for parsing application/json
app.use(bodyParser.urlencoded({ extended: false })) // for parsing application/x-www-form-urlencoded

app.post('/profile', upload.array(), function (req, res, next) {
  console.log(req.body)
  res.json(req.body)
})

 

요새는 최신 express에서 body-parser를 지원하기때문에 다운받아 사용하지않아도되서 더 간단함

app.use(express.urlencoded({extended: false}))

여기서 잠깐, urlencoded의 옵션 extended가 false인 경우 URL-encoded 데이타를 쿼리스트링 라이브러리에 따르고 true의 경우에는 qs라이브러리를 따른다고한다. default값이 true인 qs라이브러리는 npm으로 따로 설치를해줘야한다고해서 false로 따로지정한다고한다. 

This option allows to choose between parsing the URL-encoded data with the 
querystring library (when false) or the qs library (when true). The “extended” syntax allows for rich objects and arrays to be encoded into the URL-encoded format, allowing for a JSON-like experience with URL-encoded. For more information, please see the qs library.

 

결론

공식문서의 중요성..

http://expressjs.com/en/5x/api.html#express.urlencoded

 

Express 5.x - API Reference

Express 5.x API Note: This is early alpha documentation that may be incomplete and is still under development. express() Creates an Express application. The express() function is a top-level function exported by the express module. const express = require(

expressjs.com

http://expressjs.com/en/resources/middleware/body-parser.html

 

Express body-parser middleware

body-parser Node.js body parsing middleware. Parse incoming request bodies in a middleware before your handlers, available under the req.body property. Note As req.body’s shape is based on user-controlled input, all properties and values in this object a

expressjs.com

https://velog.io/@yejinh/express-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-bodyParser-%EB%AA%A8%EB%93%88

 

express 미들웨어 body-parser 모듈

서버 공부를 시작하며 요청에 대한 응답을 주는 과제를 하는 중에 node.js 의 모듈 bodyParser의 존재를 알게 되었다. bodyParser 모듈 없이는 post, put 요청 메소드의 request.body를 읽어올 수 없어 일단 사

velog.io

 

반응형