bodyParser устарел экспресс 4

Я использую Express 4.0, и я знаю, что анализатор тела был удален из ядра Express, я использую рекомендованную замену, однако я получаю

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

15 ответов

Решение

Это означает, что с помощью bodyParser() конструктор устарел, по состоянию на 2014-06-19.

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(),

Хотите ноль предупреждений? Используйте это так:

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

Объяснение: Значение по умолчанию extended Параметр устарел, это означает, что вам нужно явно передать значение true или false.

Если вы используете экспресс> 4.16, ты можешь использовать express.json() а также express.urlencoded()

В express.json() а также express.urlencoded()было добавлено промежуточное ПО для обеспечения поддержки синтаксического анализа тела запроса "из коробки". Это использует expressjs/body-parser module ниже, поэтому приложения, которым в настоящее время требуется модуль отдельно, могут переключиться на встроенные парсеры.

Source Express 4.16.0 - Дата выпуска: 28.09.2017

С этим,

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+, вы можете сделать это так:

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

Я тоже столкнулся с той же проблемой. Приведенное ниже изменение решило мою проблему.

Если вы используете версию Express 4.16+ , то

  • Возможно, вы добавили в свой код строку, которая выглядит следующим образом:

Последнее предупреждение:

Возможно, вам не потребуется устанавливать дополнительный пакет body-parser в ваше приложение, если вы используете Express 4.16+. Есть много руководств, которые включают установку body-parser, потому что они датированы до выпуска Express 4.16.

В старых версиях Express нам приходилось использовать:

app.use(express.bodyparser()); 

потому что body-parser был промежуточным ПО между узлом и экспрессом. Теперь мы должны использовать это как:

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

body-parser - это часть промежуточного программного обеспечения Express, которое читает входные данные формы и сохраняет их как объект javascript, доступный через 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

когда extended устанавливается в true, тогда спущенные (сжатые) тела будут раздуваться; когда extended установлено в false, спущенные тела отклоняются.

Вместо bodyParser.json(), просто используйте express.json(), Вам не нужно устанавливать body-parser

Например,

      const express = require("express");

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

Как вы думаете, чтобы использовать экспресс-генератор, он с самого начала создаст каркасный проект, 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

Я обнаружил, что при добавлении

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

помогает, иногда вопрос о том, как экспресс обрабатывает его, зависит от ваших запросов.

Например, может случиться так, что ваши параметры передаются в URL, а не в теле

В таком случае вам нужно захватить как параметры body, так и параметры url и использовать любой из доступных (предпочтение отдается параметрам body в приведенном ниже случае)

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

Отметьте этот ответ Ошибка веб-перехватчика полосы: не найдено подписей, соответствующих ожидаемой подписи для полезной нагрузки

      // 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});
});

body-parser устарел bodyParser: используйте отдельные промежуточные программы json / urlencoded node_modules\express\lib\ router \layer.js:95:5

express устаревший req.host: используйте req.hostname вместо node_modules\body-parser\index.js:100:29

body-parser устарел undefined extended: предоставить расширенную опцию node_modules\body-parser\index.js:105:29

Не нужно обновлять экспресс или body-parser

Эти ошибки будут удалены. Следуй этим шагам :-

  1. app.use (bodyParser.urlencoded({extended: true})); // Это поможет в кодировании.
  2. app.use (bodyParser.json()); // это будет поддерживать формат json

Он будет работать.

Удачного кодирования!

В моем случае это был typescript + vs код, ошибочно помечающий его как устаревший:

Но если вы проверите исходный код:

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

declare namespace bodyParser {

вы видите, что это должен быть конструктор, а не пространство имен. Так что либо машинописный текст, либо код vs ошибаются. Все хорошо, в этом случае не происходит устаревания (bodyParserкак пространство имен =

позвольте мне объяснить, почему мы используем парсер тела?

Промежуточное программное обеспечение для синтаксического анализа тела Node.js

Анализируйте входящие тела запросов в промежуточном программном обеспечении перед вашими обработчиками, доступными в свойстве req.body.

Примечание. Поскольку форма req.body основана на вводе, контролируемом пользователем, все свойства и значения в этом объекте не заслуживают доверия и должны быть проверены перед доверием. Например, req.body.foo.toString() может завершиться с ошибкой несколькими способами, например, свойство foo может отсутствовать или не может быть строкой, а toString не может быть функцией, а может быть строкой или другим пользовательским вводом.

Установка (расположение в папке вашего проекта)

npm install body-parser ИЛИ ЖЕ npm i body-parser

Теперь добавьте это в ваш основной js-файл или файл, который вы определили в package.json

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

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

// parse application/json
app.use(bodyParser.json())

Для получения дополнительных разъяснений перейдите по https://www.npmjs.com/package/body-parser

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

У меня та же проблема, но эта работа для меня. Вы можете попробовать эту расширенную часть.

Другие вопросы по тегам