nodeJS Express: express.urlencoded () пустое req.body - PullRequest
0 голосов
/ 02 июня 2019

У меня есть API, который работает, как и ожидалось, от всех входящих запросов, использующих запрос application / json. Но недавно я столкнулся с необходимостью обрабатывать запрос POST от x-www-form-urlencoded, и тело запроса всегда пусто.

Я тестирую API, используя POSTMAN, и отлично работает, когда отправляю запрос, используя опцию raw с JSON (application / json). Но при отправке данных с использованием x-www-form-urlencoded тело остается пустым.

Маршрутом для POST является app / api / sensor, а файлы следующие:

app.js

var express = require('express');
var app = express();

.......

app.use(express.json());
app.use(express.urlencoded());  // THIS SHOULD WORK!

......

sensor.js POST

......

sensorRoute.post('/', (req, res, next) => {

console.log(req.body);
const temperature = req.body.temperature;
console.log(temperature);

if (!temperature) {
    return res.status(400).send({'res': 'Missing data'});
} else {
    return res.status(200).send({'res': 'OK'});
}
});

....

Ожидаемый результат должен показывать данные, которые были отправлены с использованием почтальона в req.body, а не пустой объект, и работать так же, как приложение / jason.

1 Ответ

0 голосов
/ 02 июня 2019

изменить

app.use(express.urlencoded());  

на

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

Расширенная опция позволяет выбирать между синтаксическим анализом данных в кодировке URL с библиотекой строк запроса (когда false) или библиотекой qs (когдаправда).«Расширенный» синтаксис позволяет кодировать расширенные объекты и массивы в формат URL-кодирования, что позволяет использовать JSON-подобный интерфейс с кодированием URL.Для получения дополнительной информации см. Библиотеку qs.

По умолчанию установлено значение true, но использование по умолчанию устарело.поэтому добавьте опцию extended: true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...