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


398

Express 4.0을 사용하고 있으며 본문 구문 분석기가 Express Core에서 제거되었으며 권장 교체를 사용하고 있음을 알고 있습니다.

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

이 미들웨어를 어디에서 찾을 수 있습니까? 또는이 오류가 발생하지 않아야합니까?

var express     = require('express');
var server      = express();
var bodyParser  = require('body-parser');
var mongoose    = require('mongoose');
var passport    = require('./config/passport');
var routes      = require('./routes');

mongoose.connect('mongodb://localhost/myapp', function(err) {
    if(err) throw err;
});

server.set('view engine', 'jade');
server.set('views', __dirname + '/views');

server.use(bodyParser()); 
server.use(passport.initialize());

// Application Level Routes
routes(server, passport);

server.use(express.static(__dirname + '/public'));

server.listen(3000);

답변:


730

2014-06-19 기준으로 bodyParser() 생성자 를 사용하는 것이 더 이상 사용되지 않음을 의미합니다 .

app.use(bodyParser()); //Now deprecated

이제 메소드를 개별적으로 호출해야합니다.

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

등등.

당신은 여전히 경고를 받고 있다면 urlencoded당신은 사용할 필요가

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

extended구성 객체 키가 지금 기본값이 없기 때문에 명시 적으로 전달 될 필요가있다.

Express> = 4.16.0을 사용하는 경우 express.json()및 방법 아래에 본문 구문 분석기가 다시 추가되었습니다 express.urlencoded().


1
@eslammostafa bodyparser를 사용하면 생성자를 호출 할 수 없습니다. 각 개별 메소드를 호출해야합니다.
벤 포춘

2
@ BenFortune 감사 벤, 나는 그것을 얻었습니다 ./tmp 일을 걱정했지만 이제 다시 확인했습니다. / tmp 문제는 bodyParser를 사용하여 다중 부분 양식을 구문 분석하는 경우에만 발생합니다 .andrewkelley.me / post / do-not-use -bodyparser-with-express-js.html 다중 파트 양식에 강력한 것을 사용합니다.
schehata

23
무엇을 extended합니까?
Camilo Martin

1
차이점에 대한 설명이 도움이 될 것입니다. 또한 아래 두 가지를 모두 사용할 수 있음을 알 수 있습니다. 그런데 왜? 고려해야 할 사항은 무엇입니까?
Harry Moreno

8
내가 진정한 확장 설명하는 가장 좋은 방법은 확장 수단을 사용하지 않는 것입니다 curl --data "user[email]=foo&user[password]=bar" localhost:3000/login 에 서버가 수신 할 것 req.body같은 { user[email]: "foo", ...}반면 req.body될 것 {user: {email: "foo", ... }}와를 extended: true.
reed_de_la_mer

156

제로 경고를 원하십니까 ? 다음과 같이 사용하십시오.

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

설명 : extended옵션 의 기본값 이 더 이상 사용되지 않으므로 true 또는 false 값을 명시 적으로 전달해야합니다.


1
나는 여전히 "body-parser deprecated"메시지를 받는다. app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille

6
그것이 작동하는 방식이 아닙니다. 당신은 JSON에 대해 개별적으로) app.use를 (사용 urlencoded를 할 필요가
씨 - 카란

14

이전 버전의 express에서는 다음을 사용해야했습니다.

app.use(express.bodyparser()); 

body-parser는 node와 express 사이의 미들웨어 였기 때문입니다. 이제 다음과 같이 사용해야합니다.

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

"바디 파서는 미들웨어였습니다"라고 말하고 싶었다고 생각하십니까? 내가 이해
한대로

9

express>를 사용하는 4.16경우 express.json()express.urlencoded()

express.json()express.urlencoded()미들웨어 요청 본문 파싱 지원을 제공하기 위해 추가 된 아웃 - 오브 - 박스. 여기에는 expressjs/body-parser모듈 모듈 이 사용 되므로 현재 모듈을 별도로 요구하는 앱은 내장 파서로 전환 할 수 있습니다.

Source Express 4.16.0-출시일 : 2017-09-28

이것으로

const bodyParser  = require('body-parser');

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

되다

const express = require('express');

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

8

body-parser는 폼의 입력을 읽고 req.body 'body-parser'를 통해 액세스 할 수있는 자바 스크립트 객체로 저장하는 Express 미들웨어의 한 부분입니다 (를 통해 설치해야 함 npm install --save body-parser) 자세한 내용은 https://github.com/expressjs/body를 참조하십시오. 파서

   var bodyParser = require('body-parser');
   app.use(bodyParser.json()); // support json encoded bodies
   app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

extendedtrue로 설정 하면 수축 된 (압축 된) 몸체가 팽창됩니다. 때 extendedfalse로 설정되어, 수축 몸이 거부됩니다.


2

Express 생성기를 사용하는 것에 대한 의견은 무엇입니까? without deprecated messages로그에서 시작되는 기본 프로젝트를 생성 합니다.

이 명령을 실행

npm install express-generator -g

이제이 명령을 입력하여 새 Express.js 시작 응용 프로그램을 작성하십시오 your Node projects folder.

express node-express-app

이 명령은 express가 이름을 가진 새로운 Node.js 애플리케이션을 생성하도록 지시합니다 node-express-app.

다음 Go to the newly created project directory, install npm packages그리고 start the app명령을 사용하여

cd node-express-app && npm install && npm start

1

나는 추가하는 동안 그것을 발견

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

때로는 익스프레스가 처리하는 방법을 결정하는 것이 쿼리 문제입니다.

예를 들어 매개 변수가 본문이 아닌 URL 로 전달 될 수 있습니다.

이 경우 bodyurl 매개 변수를 모두 캡처 하고 사용 가능한 매개 변수를 사용해야합니다 (아래의 경우 body 매개 변수를 선호 함).

app.route('/echo')
    .all((req,res)=>{
        let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
        res.send(pars);
    });

-1

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

나는 같은 문제가 있지만 이것은 나를 위해 일한다. 이 확장 부분을 시도해 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.