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
Эти ошибки будут удалены. Следуй этим шагам :-
- app.use (bodyParser.urlencoded({extended: true})); // Это поможет в кодировании.
- 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}));
У меня та же проблема, но эта работа для меня. Вы можете попробовать эту расширенную часть.