Express에서 body-parser가 필요하지 않은 이유: “bodyparser is deprecated”

사용환경



MacOS Catalina(10.15.7), VScode(1.55.2), Node JS(16.1.0), Express JS(4.17.1), body-parser(1.19.0)

소개



타이틀대로입니다만, 최신판의 Express(2021년 5월 5일 현재 npm부터 디폴트로 인스톨 할 수 있는 최신판이 v4. 17.1)로 body-parser가 필요 없다(=설치하지 않아도 좋다) 것을 알았습니다.

저는 현재 아래의 Udemy 인기 코스에서 Node JS와 Express를 배우고 있습니다.
The Complete 2021 Web Development Bootcamp
(URL) htps //w w. 우데 my. 코 m / r rse / te-ko mp ぇ te-u-b에서

튜토리얼에서 npm에서 body-parser를 설치하고 req.body를 작성하여 "클라이언트를 통해 서버로 전송 된 데이터를 검색 할 수 있음"을 알았습니다.
 $ npm install body-parser
//jshint esversion:6

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
const port = 3000

app.use(bodyParser.urlencoded({
    extended: true
}));

//途中略
app.post("/", (req, res) => {

    var num1 = Number(req.body.num1);
    var num2 = Number(req.body.num2);

    var result = num1 + num2;

    res.send("The result of the calculation is " + result);
})
//以下略

그러나 코드를 작성할 때 정의한 bodyParser 에 예기치 않은 정정선이 들어가 다음과 같이 뭔가 이상한 설명이 나왔습니다.
(튜토리얼에서는 이런 나오지 않았어!? 눈물)

@deprecated 라고 하는 것은 “비추천의, 반대의”라고 하는 의미로, 그 아래에 「'body-parser'는 비추천입니다」라고 있는 대로, 그것이 이유로 이런 식으로 선이 들어가 있는 것 같습니다 .

덧붙여서 이것을 무시해도 문제없이 그대로 코드는 실행할 수 있었습니다.

하지만 이대로 떠나는 것은 뭔가 기분 나쁘네요.
괜찮습니다. 제대로 해결책이있었습니다.

해결책



StackOverFlow나 Medium의 기사 등, 여러가지 조사해 본 결과, 아무래도 Express의 버젼 14.6.0 이후에서는 body-parser 는 표준 탑재되고 있는 것 같습니다.

힘들지만 요컨대 최신 버전의 Express를 설치했다면 굳이 body-parser를 설치할 필요가 없다는 것입니다.

그렇다면 어떻게해야합니까?
 $ app.use(bodyParser.urlencoded({extended: true}));

아래와 같이 기술하면 됩니다.
 $ app.use(express.urlencoded({extended: true})); //Parse URL-encoded bodies

그건 그렇고, .jason();
app.use(bodyparser.json()); 

아래와 같이 변경하면 OK입니다.
app.use(express.json()); 

이것으로 변경한 후에도, req.body (은)는 문제 없게 사용할 수 있습니다.
(왜냐하면 Express에 body-parser가 표준 탑재되어 있기 때문에)

라고 하는 것으로, body-parser 씨, 이제 당신은 사용이 끝났습니다. 바이바이!
 $ npm uninstall body-parser
const 에서 bodyParser 를 정의한 것도, 더 이상 필요하지 않으므로 이쪽도 지웁시다.

덧붙여서, 전술한 완전한 코드는 이하와 같습니다.
//jshint esversion:6

const express = require("express");
//const bodyParser = require("body-parser"); ←もういらない

const app = express();
const port = 3000

//app.use(bodyParser.urlencoded({extended: true})); ←bodyParserを下記の通りexpressに変更

app.use(express.urlencoded({
    extended: true
}));

//途中略
app.post("/", (req, res) => {

    var num1 = Number(req.body.num1);
    var num2 = Number(req.body.num2);

    var result = num1 + num2;

    res.send("The result of the calculation is " + result);
})
//以下略

마지막으로



앞서 언급했듯이 VS Code의 메시지를 무시하고 실행할 수 버립니다.
깨끗이 할 수있어서 좋았습니다.
부끄러워하면서, 조사하기 전에는, 「뭐, 움직이고 있고 무시하고 어쩐지 w」라고 생각하고 있었습니다.
이런 식으로 생각해도 해결되지 않는 것은 곧 구구해 해결해 나가는 스타일이, 결과적으로 배움이 많아지는 생각이 들었으므로, 계속해 가려고 생각합니다. (그리고 이런 식으로 배운 것을 출력하는 것도.)

참고로 한 사이트들


  • Medium Express JS— body-parser and why may not need it
  • StackOverFlow bodyParser is deprecated express 4
  • Grepper “bodyparser is deprecated” Code Answer’s

  • 프런트 엔드 강화 월간 참가중! !



    또한 Qiita의 프런트 엔드 강화 월간에도 참가중입니다!
    무슨 타이밍 ... 이것을 계기로 프론트 엔드 기술을 단번에 배워갑니다.
    이쪽 → Qiita 프런트 엔드 강화 월간

    좋은 웹페이지 즐겨찾기