Express.js: req.body undefined - Как решить проблему?
У меня есть следующая конфигурация для моего сервера на Express:
app.use(app.router);
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
// Обработка POST-запросов
app.use(express.bodyParser());
// Обработка PUT-запросов
app.use(express.methodOverride());
Тем не менее, когда я пытаюсь получить доступ к req.body.something
в моих маршрутах, я получаю ошибку, указывающую на то, что body is undefined
. Вот пример маршрута, который использует req.body
:
app.post('/admin', function(req, res){
console.log(req.body.name);
});
Я прочитал, что эта проблема может быть связана с отсутствием вызова app.use(express.bodyParser());
, но, как видно, я вызываю его до определения маршрутов.
Есть ли у кого-нибудь идеи, в чем может быть проблема?
5 ответ(ов)
Начиная с последних версий Express (4.x), middleware были вынесены из основного фреймворка. Если вам нужен body-parser, вам необходимо установить его отдельно:
npm install body-parser --save
После этого добавьте следующий код в ваше приложение:
var bodyParser = require('body-parser')
var app = express()
// Парсинг application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// Парсинг application/json
app.use(bodyParser.json())
Теперь ваше приложение будет правильно обрабатывать данные, поступающие в формате application/x-www-form-urlencoded
и application/json
.
В Express 4 есть встроенный парсер тела запроса, поэтому не нужно устанавливать отдельный пакет body-parser
. Приведенный ниже код будет работать:
export const app = express();
app.use(express.json());
Теперь ваше приложение сможет обрабатывать JSON-данные в теле запросов без дополнительных зависимостей.
Нет. Вам нужно использовать app.use(express.bodyParser())
перед app.use(app.router)
. На самом деле, app.use(app.router)
должно вызываться последним.
Сначала убедитесь, что вы установили модуль npm под названием 'body-parser', выполнив следующую команду:
npm install body-parser --save
Затем убедитесь, что вы добавили следующие строки перед вызовом маршрутов:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
Таким образом, вы сможете корректно использовать body-parser
для обработки JSON-данных в ваших запросах.
Content-Type в заголовке запроса действительно очень важен, особенно когда вы отправляете данные с помощью curl или других инструментов.
Убедитесь, что вы используете правильный тип, например, application/x-www-form-urlencoded
, application/json
или другие, в зависимости от того, какие данные вы отправляете. Если оставить это поле пустым, это может привести к недопониманию со стороны Express.
Как получить переменные GET (строки запроса) в Express.js на Node.js?
Ошибка: запрос слишком велик
Express.js: app.listen vs server.listen - В чем разница?
Включение HTTPS в express.js
Корректный способ вернуть JSON с использованием Node.js или Express