Express: req.body пусто, когда accept-encoding равен 'gzip, deflate' - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь получить веб-крючок от третьего лица.Хотя я вижу длину содержимого> 0, console.logging req.body просто возвращает {}.Запрос отправляется по маршруту '/v2/wtevr/report/wtevr'.

Это заголовки, полученные из POST-запроса webhook:

accept: '*/*',
'accept-encoding': 'gzip, deflate',
'user-agent': 'rest-client/2.0.2 (linux-gnu x86_64) ruby/2.5.3p105',
'content-type': 'application/vnd.wtevr.wtevr.leadwebhook+json;version=0.0.2',
'content-length': '254',
host: 'api.mysite.co.uk'

Я использую Express'анализатор тела для анализа ответа.Согласно Express docs , body-parser поддерживает автоматическое наложение кодировок 'gzip' и 'deflate'.Я указал тип содержимого, чтобы перехватить запрос и распаковать его, но он не работает.Вот как выглядит мой код:

app.use(
  function(req, res, next) {
    if (req.url === '/v2/wtevr/report/wtevr') {
      next();
    }
  }
)
app.use(bodyParser.json({type: ['application/json', 'application/vnd.wtevr.wtevr.leadwebhook+json;version=0.0.2']}));
app.use(bodyParser.urlencoded({ extended: true }));

Кто-нибудь знает, как я могу разобрать / просмотреть тело?

1 Ответ

0 голосов
/ 31 декабря 2018

удалось решить свой вопрос.Решение состояло в том, чтобы не указывать пользовательский тип контента как точную строку в опции 'type' функции .json анализатора тела, а либо использовать подстановочный знак, либо указывать его точно, но как функцию.

Любой из двух приведенных ниже фрагментов кода работает:

app.use(bodyParser.json({type: (req) => req.get('Content-Type') === 'application/vnd.wtevr.wtevr.leadwebhook+json;version=0.0.2'}));
app.use(bodyParser.json());

или

app.use(bodyParser.json({type: ['application/json', 'application/*+json']}));
...