javascript - 在发送到 API 网关之前压缩 js lambda 响应
问题描述
我有一个 AWS lambda 返回一个大小超过 6MB 的响应。(我知道它并不理想,并且限制了 RequestResponse lambda 调用类型的 AWS lambda 限制为 6MB)。
在这种情况下,我收到以下错误:
413 Request entity too large
我想在将它发送到 API Gateway 之前压缩这个响应。我的 lambda 在 javascript 中,我正在使用 zlib 以 gzip 格式压缩响应,但我收到异步错误。
代码片段:
const invocationResponse = await zlib.gzip(JSON.parse(data.Payload),function (error, result) {
if (error) throw error return result
})
错误 :
ProcessingLambdaInvoker: Error (asynchronously) invoking backend lambda: TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or Buffer. Received type object
at validChunk (_stream_writable.js:272:10)
at Gzip.Writable.write (_stream_writable.js:307:21)
at Gzip.Writable.end (_stream_writable.js:617:10)
有人可以建议一种更好的方法来压缩 js 中的响应并将其发回。我还必须在前端解压缩它还是浏览器会自动解压。我知道在发送之前我必须对其进行压缩,然后使用 base64 对其进行编码。
解决方案
请注意错误类型ERR_INVALID_ARG_TYPE
,请改用JSON.stringify。
正确的
zlib.gzip(JSON.stringify(data.Payload), ...)
错误的
zlib.gzip(JSON.parse(data.Payload), ...)