Задать вопрос
@thisuser

Как вывести тело post запроса nodejs?

Использую Koa.

Есть post запросы, которые приходят со стороннего сервиса. Шлют json.
Все прекрасно обрабатываются, кроме одного запроса. Для примера, вот так проверяю содержимое запроса:

router.post('/myevent', async (ctx, next) => {
	let body = ctx.request.body;
	console.log(body); 
	ctx.body = body;
});


Отлично выводит тот самый, посланный json в консоль.

А вот один запрос почему то выводит пустой объект `{}`.
Сервис, который шлёт запросы уверят, что всё ок..

Начал смотреть заголовки, которые приходят. Вот такие они на тех запросах, что отлично обрабатываются:

{ method: 'POST',
  url: '/myevent',
  header: 
   { host: 'mydomain.ru',
     connection: 'close',
     'content-length': '84584',
     'user-agent': 'GuzzleHttp/6.3.3 curl/7.65.0 PHP/7.3.9',
     'content-type': 'application/json' } }


Прекрасно видно, что content-type тот самый json, content-length - отлично. И в консоли я вижу что надо!

А вот запрос с пустым объектом:

{ method: 'POST',
  url: '/myevent',
  header: 
   { host: 'mydomain.ru',
     connection: 'close',
     'content-length': '6335',
     'user-agent': 'GuzzleHttp/6.3.3 curl/7.65.0 PHP/7.3.9' } }


Как видно, тут нет `content-type` и `content-length` значительно меньше.
Со стороны сервиса уверяют, что раз content-length имеет некое значение, то и запрос они прекрасно шлют. А я что-то коряво принимаю. Но как мне таки его обработать? Всё что можно попробовал, выводит пустой объект.

Обработка запроса для всех одна, (код выше). Что можно попробовать?
Спасибо.
  • Вопрос задан
  • 1291 просмотр
Подписаться 2 Простой Комментировать
Решения вопроса 2
@ivandao
Дело в content-type , скажите чтобы установили в 'application/json'.
По умолчанию он равен text.
Или же обрабатывайте оба варианта - с json и с text
Ответ написан
Комментировать
@thisuser Автор вопроса
Как и предполагал, отсутствие content-type в этом конкретно запросе - всему виной. Насильно через koa-bodyparser прописал:

app.use(bodyparser({
  detectJSON: function (ctx) {
    return /myevent/i.test(ctx.path);
  }
}));


И таки завелось всё.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы