Внезапно это произошло со всеми моими проектами.
Всякий раз, когда я делаю пост в nodejs, используя express и body-parser req.body
- это пустой объект.
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())
// parse application/json
app.use(bodyParser.json())
app.listen(2000);
app.post("/", function (req, res) {
console.log(req.body) // populated!
res.send(200, req.body);
});
Через аякс и почтальона всегда пусто.
Однако через локон
$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/
это работает как задумано.
Я пытался вручную установить Content-type : application/json
в первом, но я всегда получаю400 bad request
Это сводит меня с ума.
Я думал, что это было что-то обновлено в body-parser, но я понизил, и это не помогло.
Любая помощь приветствуется, спасибо.
Content-Type
в почтальоне? Если нет, вы можете попробовать это, так как у меня были проблемы с почтальоном, не отправляющимContent-Type
.Ответы:
В Почтальоне из 3 вариантов, доступных для типа контента, выберите «X-www-form-urlencoded», и он должен работать.
Также, чтобы избавиться от сообщения об ошибке, замените:
С участием:
Смотрите https://github.com/expressjs/body-parser
Промежуточное программное обеспечение body-parser обрабатывает только данные в формате JSON и urlencoded, а не multipart
источник
app.use(express.json());
С помощью Postman для проверки действий HTTP-сообщения с полезными данными необработанных данных JSON выберите этот
raw
параметр и установите следующие параметры заголовка:Кроме того, обязательно оберните все строки, используемые в качестве ключей / значений в полезной нагрузке JSON, в двойные кавычки.
body-parser
Пакет будет анализировать многоканальный сырым JSON полезную нагрузку просто отлично.Протестировано в Chrome v37 и v41 с расширением Postman v0.8.4.13 (
body-parser
v1.12.2 иexpress
v4.12.3) с настройкой ниже:источник
form-data
Postman для публикации данных, я всегда получаю{}
в req.body. Должен ли я установитьContent-Type
опцию?Я сделал очень глупую ошибку и забыл определить
name
атрибуты для входных данных в моем HTML-файле.Так что вместо
У меня есть это.
Сейчас
request.body
заселён так:{ password: 'hhiiii' }
источник
Я обнаружил, что это работает при отправке с типом контента
в сочетании с серверной стороной
app.use(bodyParser.json());
Теперь я могу отправить через
и результат доступен
request.body.name
на сервере.источник
xmlHttp.send(JSON.stringify(data));
Я столкнулся с этой проблемой сегодня, и что было исправлено, чтобы удалить заголовок типа контента в Postman! Очень странно. Добавление здесь, если это кому-то поможет.
Я следовал учебному пособию по BeerLocker здесь: http://scottksmith.com/blog/2014/05/29/beer-locker-building-a-restful-api-with-node-passport/
источник
Вы должны проверить, правильно ли установлено промежуточное ПО body-parser для типа запроса (json, urlencoded).
Если вы установили,
тогда в почтальоне вы должны отправить данные в сыром виде.
https://i.stack.imgur.com/k9IdQ.png скриншот почтальона
Если вы установили,
тогда следует выбрать параметр «x-www-form-urlencoded».
источник
Моя проблема заключалась в том, что я сначала создавал маршрут
и регистрация промежуточного программного обеспечения после маршрута
благодаря структуре приложения, копированию и вставке проекта из примеров.
Как только я исправил порядок регистрации промежуточного программного обеспечения перед маршрутом, все заработало.
источник
Даже когда я изучал node.js в первый раз, когда я начал изучать его через веб-приложение, у меня все это было хорошо выполнено в моей форме, тем не менее я не мог получать значения в пост-запросе. После долгой отладки я узнал, что в форме, которую я предоставил,
enctype="multipart/form-data"
из-за которой я не смог получить значения. Я просто удалил это, и это сработало для меня.источник
enctype="multipart/form-data"
multer
- см. документацию на npmjs.com/package/multerКажется, что если вы не используете encType (по умолчанию
application/x-www-form-urlencoded
), вы получаете поля ввода текста, но не получаете файл.Если у вас есть форма, в которой вы хотите разместить ввод текста и файл, тогда используйте
multipart/form-data
тип кодировки, а в дополнение к этому используйтеmulter
промежуточное программное обеспечение. Multer проанализирует объект запроса и подготовитreq.file
для вас, и все остальные поля ввода будут доступны черезreq.body
.источник
multer
действительно было решением моей проблемы. Было бы хорошо, если бы вы могли добавить пример того, как использовать это как часть вашего ответаПодобная проблема случилась со мной, я просто перепутал порядок параметров обратного вызова. Убедитесь, что вы настраиваете функции обратного вызова в правильном порядке. По крайней мере, для тех, у кого такая же проблема.
источник
Убедитесь, что ["key": "type", "value": "json"] & ["key": "Content-Type", "value": "application / x-www-form-urlencoded"] находится в вашем заголовки запроса почтальона
источник
Я решил это, используя
multer
предложенное выше, но они упустили полный рабочий пример того, как это сделать. В основном это может произойти, когда у вас есть группа форм сenctype="multipart/form-data"
. Вот HTML-код для формы, которую я имел:А вот как использовать,
multer
чтобы получить значения и имена этой формы с помощьюExpress.js
иnode.js
:источник
У меня была такая же проблема несколько минут назад, я попробовал все возможное в приведенных выше ответах, но любой из них работал.
Единственное, что я сделал, было обновление версии Node JS, я не знал, что обновление может на что-то повлиять, но это помогло.
Я установил версию Node JS
10.15.0
(последняя версия), вернулся8.11.3
и все теперь работает. Может быть,body-parser
модуль должен исправить это.источник
У меня не было имени во входных данных ... мой запрос был пуст ... рад, что он закончен, и я могу продолжать кодировать. Спасибо всем!
Ответ, который я использовал Джейсон Ким:
Так что вместо
у меня есть это
источник
Вы не должны делать это
JSON.stringify(data)
при отправке через AJAX, как показано ниже.Это НЕ правильный код:
Правильный код:
источник
Если вы делаете с почтальоном, пожалуйста, подтвердите эти вещи, когда вы запрашиваете API
источник
Я использовал restify вместо express и столкнулся с той же проблемой. Решение было сделать:
источник
Я верю, что это может решить
app.use(express.json());
источник
Измените
app.use(bodyParser.urlencoded());
в своем коде наи в почтальоне, в заголовке изменить
Content-Type
значение сapplication/x-www-form-urlencoded
наapplication/json
Та :-)
источник
Спасибо всем за ваши отличные ответы! Потратил довольно много времени на поиск решения, и со своей стороны я совершил элементарную ошибку: я звонил
bodyParser.json()
изнутри функции:Мне просто нужно было сделать,
app.use(['/password'], bodyParser.json())
и это сработало ...источник
В почтальоне даже после получения принятого ответа я получал пустое тело запроса. Проблема оказалась не передавая заголовок под названием
Этот заголовок присутствовал по умолчанию (вместе с 5 другими), который я отключил. Включите это, и вы получите тело запроса.
источник
Моя проблема заключалась в том, чтобы сначала создать маршрут,
require("./routes/routes")(app);
я переместил его в конец кода раньше,app.listen
и это сработало!источник
Уже решил проблему, но может кому-то помочь.
Следите за тем, чтобы с каждым вашим элементом формы было связано какое-то имя. Это была ошибка, которую я делал ...!
источник