programing

bodyParser는 express 4에서 사용되지 않습니다.

javajsp 2023. 6. 3. 08:15

bodyParser는 express 4에서 사용되지 않습니다.

나는 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);

즉, 다음을 사용합니다.bodyParser() 2014-06-19 시점에서 생성자가 더 이상 사용되지 않습니다.

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

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

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

등등.

여전히 경고가표경는우되시계속▁with로 경고를 .urlencoded당신은 야합사다니해를.

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

extended이제 기본값이 없으므로 구성 개체 키를 명시적으로 전달해야 합니다.

, 가 Express > = 4.16.0의 되었습니다.express.json()그리고.express.urlencoded().

경고 0개를 원하십니까?다음과 같이 사용합니다.

// Express v4.16.0 and higher
// --------------------------
const express = require('express');

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

// For Express version less than 4.16.0
// ------------------------------------
const bodyParser = require('body-parser');

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

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

Express 4.16.0 이상 버전에 대한 참고: 요청 본문 구문 분석 지원을 즉시 제공하기 위해 본문 구문 분석기가 다시 추가되었습니다.

> 를 익스프레스사는경우하용를 >4.16사용할 수 있습니다.express.json()그리고.express.urlencoded()

express.json()그리고.express.urlencoded()요청 본문 구문 분석 지원을 즉시 제공하기 위해 미들웨어가 추가되었습니다.이것은 아래의 모듈 모듈을 사용하므로 현재 모듈이 별도로 필요한 앱은 내장 파서로 전환할 수 있습니다.

원천 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());

바디 파서 사용 안 함

Express 4.16+를 사용하는 경우 express:

app.use(express.urlencoded({extended: true}));
app.use(express.json()) // To parse the incoming requests with JSON payloads

이다음을사본파문제수있거다습니를 사용하여 본문 를 제거할 수 .npm uninstall body-parser



내용을 POST를 .req.body

app.post("/yourpath", (req, res)=>{

    var postData = req.body;

    //Or if this doesn't work

    var postData = JSON.parse(req.body);
});

이것이 도움이 되길 바랍니다.

저도 같은 문제에 직면했습니다.제가 언급한 아래의 변경은 제 문제를 해결했습니다.

Express 4.16+ 버전을 사용하는 경우

  • 코드에 다음과 같은 행을 추가했을 수 있습니다.

app.use(bodyparser.json()); //utilizes the body-parser package

  • 이제 위의 줄을 다음으로 바꿀 수 있습니다.

app.use(express.json()); //Used to parse JSON bodies

express.json()의 코드는 bodyparser.json()기반으로 하기 때문에 응용 프로그램에 중단된 변경 사항이 발생하지 않습니다.

  • 사용자 환경에 다음 코드도 있는 경우:

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

  • 위의 줄을 다음으로 바꿀 수 있습니다.

app.use(express.urlencoded()); //Parse URL-encoded bodies

  • ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠextendedexpress.urlencoded()그런 다음 위의 코드를 다음과 같이 업데이트합니다.

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

마지막 주의 사항:

Express 4.16+를 사용하는 경우 응용 프로그램에 추가 본문 파서 패키지를 설치할 필요가 없을 수 있습니다.Express 4.16 릴리스 이전의 날짜이기 때문에 본문 파서 설치를 포함하는 많은 튜토리얼이 있습니다.

이전 버전의 익스프레스에서는 다음을 사용해야 했습니다.

app.use(express.bodyparser()); 

바디 파서는 노드와 익스프레스 사이의 미들웨어였기 때문입니다.이제 다음과 같이 사용해야 합니다.

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

입니다.req.body('body-parser'를 통해).npm install --save body-parser자세한 내용은 https://github.com/expressjs/body-parser 을 참조하십시오.

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

extendedtrue로 몸체가. true인 경우에는 공기가 빠집니다.extendedfalse로 설정되며 공기가 빠진 차체는 거부됩니다.

에 에.bodyParser.json() 순한사용을 사용합니다.express.json()설치하지body-parser

예를 들면,

const express = require("express");

const app = express();
app.use(express.json());

를 추가하는 동안 발견했습니다.

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

도움이 됩니다. 때로는 express에서 처리하는 방법을 결정하는 쿼리의 문제이기도 합니다.

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

이러한 경우 본문 url 매개 변수를 모두 캡처하고 사용 가능한 것을 사용해야 합니다(아래의 경우 본문 매개 변수에 대한 기본 설정).

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

하십니까? 그것은 시작할 골격 프로젝트를 생성할 것입니다.without deprecated messages에 되었습니다.

이 명령 실행

npm install express-generator -g

"Express.js"에 이 하여 새 프로그램을 .your Node projects folder.

express node-express-app

이 Node. 프로그램의 .js인 새 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

body-parser 사용되지 않는 bodyParser: 개별 json/url 인코딩 미들웨어 node_modules\express\lib\router\layer.js:95:5

express deprecommitted req.host: node_modules\body-parser\index.js:100:29 대신 req.hostname을 사용합니다.

body-parser 사용되지 않는 정의되지 않은 확장: 확장 옵션 node_provider\body-parser\index.js:105:29

익스프레스 또는 바디 파서를 업데이트할 필요 없음

이러한 오류는 제거됩니다.다음 단계를 수행합니다.

  1. app.use(bodyParser.urlencoded({extended: true}); // 이것은 인코딩에 도움이 됩니다.
  2. app.use(bodyParser.json(); // json 형식을 지원합니다.

실행됩니다.

해피 코딩!

다음 답변을 확인하십시오. Stripe webhook 오류: 페이로드에 필요한 서명과 일치하는 서명을 찾을 수 없습니다.

// Use JSON parser for all non-webhook routes
app.use((req, res, next) => {
  if (req.originalUrl === '/webhook') {
    next();
  } else {
    express.json()(req, res, next);
  }
});

// Stripe requires the raw body to construct the event
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
  const sig = req.headers['stripe-signature'];

  let event;

  try {
    event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
  } catch (err) {
    // On error, log and return the error message
    console.log(`❌ Error message: ${err.message}`);
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  // Successfully constructed event
  console.log('✅ Success:', event.id);

  // Return a response to acknowledge receipt of the event
  res.json({received: true});
});

제 경우에는 typescript + vs 코드가 더 이상 사용되지 않는 것으로 잘못 표시되었습니다.

하지만 소스 코드를 확인하면:

/** @deprecated */
declare function bodyParser(
    options?: bodyParser.OptionsJson & bodyParser.OptionsText & bodyParser.OptionsUrlencoded,
): NextHandleFunction;

declare namespace bodyParser {

네임스페이스가 아니라 생성자여야 합니다.그래서 typescript나 vs code 중 하나가 잘못 알고 있습니다.좋아요, 이 경우에는 비난이 일어나지 않습니다.bodyParser네임스페이스=로

언급URL : https://stackoverflow.com/questions/24330014/bodyparser-is-deprecated-express-4