6

bodyParser устарел в Express 4

4

Я использую Express 4.0 и знаю, что парсер тела (body-parser) был исключен из основного кода 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

Где мне найти эти предполагаемые миддлвары (middlewares)? Или вообще не должно быть этих ошибок?

Вот мой код:

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

// Routes на уровне приложения
routes(server, passport);

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

server.listen(3000);

Подскажите, как правильно использовать новые миддлвары для парсинга JSON и urlencoded данных?

5 ответ(ов)

4

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

// Express v4.16.0 и выше
// --------------------------
const express = require('express');

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

// Для версии Express ниже 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 и выше: парсер тела запросов был заново добавлен для поддержки парсинга тела запроса "из коробки".

0

Не используйте body-parser

Если вы используете Express версии 4.16 и выше, вы можете сделать это следующим образом с помощью express:

app.use(express.urlencoded({ extended: true }));
app.use(express.json()); // Для парсинга входящих запросов с JSON-данными

Теперь вы можете удалить body-parser с помощью команды npm uninstall body-parser.

Чтобы получить содержимое POST-запроса, используйте req.body:

app.post("/yourpath", (req, res) => {
    var postData = req.body;

    // Или если это не сработает

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

Надеюсь, это поможет!

0

Я также столкнулся с этой проблемой. Ниже приведенные изменения помогли мне решить её.

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

  • Возможно, вы добавили строку в свой код, которая выглядит следующим образом:
app.use(bodyparser.json()); // использует пакет body-parser
  • Вы можете заменить эту строку на:
app.use(express.json()); // используется для парсинга JSON-тел

Это не должно внести никаких изменений в ваше приложение, так как код в express.json() основан на bodyparser.json().

  • Если в вашем коде также присутствует следующая строка:
app.use(bodyParser.urlencoded({ extended: true }));
  • Вы можете заменить её на:
app.use(express.urlencoded()); // парсит URL-кодированные тела
  • Если вы получаете предупреждение о том, что вам все еще нужно передать extended в express.urlencoded(), обновите код следующим образом:
app.use(express.urlencoded({ extended: true }));

Наконец, небольшая предостережение:

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

0

В старых версиях Express мы использовали следующий код для обработки тела запроса:

app.use(express.bodyParser());

Это происходило потому, что body-parser был промежуточным ПО между Node и Express. Теперь же необходимо использовать его следующим образом:

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

Начиная с версии 4.0.0, body-parser стал отдельным модулем, и разработчики рекомендуют явно подключать его и настраивать по мере необходимости.

0

body-parser — это промежуточное ПО для Express, которое считывает данные формы и сохраняет их в виде объекта JavaScript, доступного через req.body. Для использования body-parser необходимо его установить с помощью команды npm install --save body-parser. Для получения дополнительной информации вы можете обратиться к документации на GitHub.

Вот пример кода:

var bodyParser = require('body-parser');
app.use(bodyParser.json()); // поддержка JSON-кодированных тел
app.use(bodyParser.urlencoded({ extended: true })); // поддержка закодированных тел

При установке параметра extended в true сжатые тела будут распакованы. Если же extended установлен в false, то сжатые тела будут отвергнуты.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь