본문 바로가기
개발/Express

에러 해결 : 'body-parser' 취소선, The declaration was makred as deprecated here

by 안뇽! 2021. 9. 10.
반응형

bodyParser 는 더이상 사용되지 않습니다

 

이 에러에 대해 이야기하기 전에 먼저 body-parser의 역할에 대해 알아보자.

 

body-parser

 

req.body의 디폴트 값은 undefined이다.

app.post('/upper', function (req, res) {
  // req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
  
  console.log(req.body)

})

위의 코드를 살펴보면 req.body에 어떤걸 입력하던 그대로 콘솔로그가 찍힐 것 같다. 실험해보자.

 

postman으로 body에 "hi" 를 입력하고 post해보자.

req.body에 "hi" 입력

body에 "hi"를 입력해도, 콘솔로그에 undefined가 찍힌다. 

앞서 말했듯이, req.body의 디폴트값은 undefined이기 때문이다.

 

body-parser는 req.body를 파싱해주는 역할을 한다.

 

그래서 body-parser를 사용하면 정상적으로 "hi"가 콘솔로그 된다.

 

하지만 body-paerser를 import하면 취소선이 나타나면서 The declaration was makred as deprecated here 메시지가 나타난다.


해결책

스택오버플로우에 보면 Express 버전 4.16이후부터는 body-parser가 express안에 내장되어 있으니 body-parser를 사용하지 말고 아래 코드를 추가하라고 한다.

https://stackoverflow.com/questions/62396498/tslint-marks-body-parser-as-deprecated

 

그런데 왜인지 나는 위 두 코드를 추가해도, 하나씩 추가해보아도 해결되지 않았다.

 

 

그래서 위의 방법이 안된다면 이 방법을 추천한다.

 

app.use(express.json({strict: false}))

 

express.json()은 request를 JSON으로 파싱해준다. body-parser에 기초하여 만들어졌다.

strict: true 일때는 object 타입인 객체, 배열만 허용하고 

strict:false 일때는 JSON.parse()가 허용하는 모든 것을 허용한다고 한다.

 

 

express.json()을 사용한 코드는 아래와 같다. 

const express = require('express');
const app = express();
.
.
.
app.use(express.json({strict: false}))
//stric:true일땐 객체,배열(object)만 허용
//strict:false일땐 json.parse가 허용하는 모든것. -> 사실상 거의 모든것
.
.
.
app.post('/upper', function (req, res) {
  // req.body에는 JSON의 형태로 payload가 담겨져 있다.
  
  console.log(req.body)
  res.json(req.body.toUpperCase())
  //res.json() : json() 응답을 전송한다.
})

postman을 이용해서 req.body에 "hi"를 입력한다.

 

req.body에 "hi" 입력

body에 "hi"를 입력하면 대문자로 바꿔서 "HI" 가 된다. 

 

 

console.log(req.body)도 잘 작동한다.!

반응형

'개발 > Express' 카테고리의 다른 글

Express 로 뉴스 크롤링하기  (0) 2023.08.04
express middleware  (0) 2022.06.06
Express : res.end() res.send() res.json() 차이  (0) 2021.09.11