AWS Lambda возвращает как данные в кодировке base64, так и текстовую строку в основном ответе

#node.js #amazon-web-services #aws-lambda

#node.js #amazon-веб-сервисы #aws-lambda

Вопрос:

Я использую реализацию AWS Lambda с Node.js для создания PDF-файла. У меня есть следующее callback , которое возвращает pdf в закодированном результате base64. Это отлично работает для меня:

 return callback(null, {
    statusCode: 200,
    body: new Buffer(data).toString('base64'),
    isBase64Encoded: true,
    headers: {
      'Content-Type': 'text',
    },
  })
  

Тем не менее, я хотел бы добавить дополнительную информацию в свой ответ — не только данные в формате PDF в кодировке bae64, но и некоторые string результаты типов, которые я могу использовать в своем активном приложении, подключенном к этой функции Lambda. Я хотел бы вернуть данные base64 и строковые данные, что-то вроде этого:

 return callback(null, {
    statusCode: 200,
    body: JSON.stringify(
        {
            message: 'hello world',
            report: new Buffer(data).toString('base64')
        }
    ),
    isBase64Encoded: true,
    headers: {
      'Content-Type': 'text',
    },
  })
  

Но у меня это не получается. Как бы мне реорганизовать приведенное выше, чтобы возвращать как строковые данные, так и данные base64? Мне также приходится принудительно isBase64Encoded устанавливать значение true , которое может противоречить моему новому требованию возвращать как base64, так и обычные строковые данные.

Ответ №1:

Content-Type Вашего ответа нет text — поскольку вы возвращаете JSON, application/json значение будет иметь больше смысла и может облегчить некоторые из возникающих у вас проблем. Было бы полезно, если бы сообщение можно было обновить с помощью более подробной информации об ошибках, с которыми вы сталкиваетесь.

Еще одним возможным решением было бы добавить message (и любые другие строковые значения) в качестве HTTP-заголовков в уже работающем ответе в кодировке base64. Затем ваш клиент может декодировать HTTP-ответ, тело которого содержит заголовки PDF и HTTP в кодировке base64 x-custom-message (или что-то подобное), установленные в hello world .