Как получить доступ к необработанному телу запроса Fastify? - PullRequest
0 голосов
/ 09 апреля 2020

Как вы можете себе представить, я знаком с Express, но я впервые использую Fastify.

Я хотел бы получить доступ к неизмененному телу запроса Fastify, для проверки подписи webhook - ie, я хотел бы видеть запрос, как он поступил, без каких-либо изменений промежуточного программного обеспечения. В Express это часто делается путем доступа к request.rawBody.

Как получить доступ к необработанному телу запроса Fastify?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

В GitHub есть проблема для поддержки rawBody

И есть также модуль: "raw-body" . Чтобы использовать этот модуль в Fastify:

const rawBody = require('raw-body')

fastify.addContentTypeParser('*', (req, done) => {
    rawBody(req, {
        length: req.headers['content-length'],
        limit: '1mb',
        encoding: 'utf8', // Remove if you want a buffer
    }, (err, body) => {
        if (err) return done(err)
        done(null, parse(body))
    })
})

Я надеюсь, что помог вам, я тоже новичок в Fastify

0 голосов
/ 19 апреля 2020

Примечание : запросы Fastify могут только иметь req.body - они не могут иметь, например, req.body и req.rawBody, как другие веб-серверы (например, Express). Это потому, что addContentTypeParser() возвращает только измененный body, он не может добавить что-либо еще к запросу.

Вместо этого, в синтаксическом анализаторе типов контента мы только добавляем к одному маршруту , мы делаем:

  • req.body.parsed (объект, тот же контент, который обычно был бы в req.body)
  • req.body.raw (строка)

Подробнее см. GitHub и addContentTypeParser () .

  server.addContentTypeParser(
    "application/json",
    { parseAs: "string" },
    function (req, body, done) {
      try {
        var newBody = {
          raw: body,
          parsed: JSON.parse(body),
        };
        done(null, newBody);
      } catch (error) {
        error.statusCode = 400;
        done(error, undefined);
      }
    }
  );
...