bodyParser устарел в Express 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 ответ(ов)
Хотите нулевые предупреждения? Используйте это:
// 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 и выше: парсер тела запросов был заново добавлен для поддержки парсинга тела запроса "из коробки".
Не используйте 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);
});
Надеюсь, это поможет!
Я также столкнулся с этой проблемой. Ниже приведенные изменения помогли мне решить её.
Если вы используете версию 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.
В старых версиях Express мы использовали следующий код для обработки тела запроса:
app.use(express.bodyParser());
Это происходило потому, что body-parser
был промежуточным ПО между Node и Express. Теперь же необходимо использовать его следующим образом:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
Начиная с версии 4.0.0, body-parser
стал отдельным модулем, и разработчики рекомендуют явно подключать его и настраивать по мере необходимости.
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
, то сжатые тела будут отвергнуты.
Запись в файлы в Node.js
Как получить переменные GET (строки запроса) в Express.js на Node.js?
Ошибка "npm WARN package.json: Нет поля repository"
Как получить параметры GET после "?" в Express?
Ошибка: запрос слишком велик