Получить тело запроса на стороне сервера

Клиент отправляет POST-запрос:

  const array = [1, 2, 3];

  fetch("https://...yandexcloud.net/save-questions", {
    method: 'POST',
    mode: "no-cors",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(array)
  });

На стороне сервера вызывается функция:

module.exports.handler = async function (event, context) {

console.log(JSON.stringify(event.body));

Результат: "WzEsMiwzXQ=="

Что надо еще указать, чтобы можно было на стороне сервера получить нужный мне объект в расшифрованном виде? Сервер находится в Yandex Cloud. Может в облаке нужно еще что-то настроить. Спасибо.


Ответы (2 шт):

Автор решения: Игорь

В итоге сделал так:

     const valueString =
        Buffer
            .from(JSON.stringify(event.body), 'base64')
            .toString("utf8");

    const myObjects = JSON.parse(valueString) as MyObject[];
→ Ссылка
Автор решения: niknils

Намёк на то, что можно закрыть вопрос, т.к. Вы нашли решение.

В общем-то, я подтверждаю Вам, что решение Вы нашли => закрытие вопроса (или фарм голосов?):

Buffer.from(data, 'base64')

Вместо 'base64' может быть hex, utf8 и прочие (см. вторую ссылку)

Подробнее о методе: https://nodejs.org/api/buffer.html#static-method-bufferfromstring-encoding

Подробнее о вариантах (де)кодирования: https://www.w3resource.com/node.js/nodejs-buffer.php

.toString() также поддерживает эти варианты.

Примеры, где это также может быть полезно: Buffer<-'binary' (де-факто):

  • require('node:crypto').createHash(/*к примеру*/'md5').update(data, 'hex')
  • require('node:fs').readFileSync(data, 'utf8')
→ Ссылка