5

Express.js: req.body undefined - Как решить проблему?

11

У меня есть следующая конфигурация для моего сервера на 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 ответ(ов)

3

Начиная с последних версий 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.

1

В Express 4 есть встроенный парсер тела запроса, поэтому не нужно устанавливать отдельный пакет body-parser. Приведенный ниже код будет работать:

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

Теперь ваше приложение сможет обрабатывать JSON-данные в теле запросов без дополнительных зависимостей.

1

Нет. Вам нужно использовать app.use(express.bodyParser()) перед app.use(app.router). На самом деле, app.use(app.router) должно вызываться последним.

0

Сначала убедитесь, что вы установили модуль 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-данных в ваших запросах.

0

Content-Type в заголовке запроса действительно очень важен, особенно когда вы отправляете данные с помощью curl или других инструментов.

Убедитесь, что вы используете правильный тип, например, application/x-www-form-urlencoded, application/json или другие, в зависимости от того, какие данные вы отправляете. Если оставить это поле пустым, это может привести к недопониманию со стороны Express.

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