Express bodyparser не работает должным образом

Для настройки моего bodyparser я использую следующий код:

const express = require('express')
const app = express();
const bodyParser = require('body-parser');

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

Теперь, если у меня есть следующий маршрут POST в моем экспресс-маршрутизаторе:

var router = require('express').Router();

router.post('/sendadvertisement', async (req, res) => {
  console.log(req.body)
});

Результат: [Object: null prototype] {advertisement: 'test'} -> Мой req.body не пуст, потому что он в формате json в выводе моей консоли.

Я не очень понимаю, как может получиться такой результат, потому что я определил, что тело должно быть в формате json. Я также пробовал это с app.use(express.json()), тоже не работает.


person Gilles Heinesch    schedule 01.08.2019    source источник
comment
возможный дубликат: stackoverflow.com/questions/24543847/req- пустое тело в сообщениях   -  person S. Kuiter    schedule 01.08.2019
comment
@S.Kuiter Уже читал эту статью.   -  person Gilles Heinesch    schedule 01.08.2019
comment
Возможный дубликат req.body пуст в сообщениях   -  person Xaqron    schedule 01.08.2019


Ответы (3)


Если вы используете экспресс, вы можете использовать этот код для установки парсера тела.

app.use(express.json( {extended:false} ));
app.use(express.urlencoded({extended: false}));
person Udit    schedule 01.05.2021

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

Это также дает ошибку, страница прокручивается после отправки.

person Pankaj Kumar    schedule 31.05.2021
comment
Если у вас есть новый вопрос, задайте его, нажав кнопку Задать вопрос. Включите ссылку на этот вопрос, если это помогает обеспечить контекст. – Из обзора - person slideshowp2; 01.06.2021

Я заменил роутер на приложение, и все заработало нормально.

Router.get/post и т. д. предназначен только для определения подмаршрутов после того, как вы смонтировали функцию промежуточного программного обеспечения, например app.use('route'), которая обрабатывает маршрут. Если вы хотите использовать маршрутизатор, вы должны смонтировать маршрут, используя app.use(...), а затем объявить сообщение, используя router.post(...).

См. также: Разница между app.use() и router.use() в Express

const express = require('express')
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.post('/sendadvertisement', async (req, res) => {
    console.log(req.body)
});
app.listen(8000, () => {
    console.log('Example app listening on port 8000!')
});
person S. Kuiter    schedule 01.08.2019
comment
Это не решение, это просто говорит нам, что это как-то связано с маршрутизатором. - person Gilles Heinesch; 01.08.2019
comment
Отредактировал мой ответ - person S. Kuiter; 01.08.2019