#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
.