node.js - @aws-sdk/client-lambda] - 调用 Lambda - Unit8Array 中的有效负载响应 - 转换为字符串
问题描述
我正在使用@aws-sdk/client-lambda
npm 包来调用 lambdas。我有两个 Lambda。Lambda A 和 Lambda B。Lambda A 正在尝试调用 Lambda B。
Lambda A 通过运行以下代码调用 Lambda B:
const { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda');
module.exports = {
getGitHubToken: async () => {
const client = new LambdaClient({ region: process.env.REGION });
const params = {
FunctionName: process.env.GITHUB_TOKEN_FUNCTION,
LogType: 'Tail',
Payload: '',
};
const command = new InvokeCommand(params);
try {
const { Payload } = await client.send(command);
console.log(Payload);
return Payload;
} catch (error) {
console.error(error.message);
throw error;
}
},
};
来自 Lambda B 的预期响应应如下所示:
{
statusCode: 200,
body: JSON.stringify({
token: '123',
}),
};
但是,Payload 似乎从以下行返回console.log(Payload);
:
我查看了AWS SDK 网站,它看起来像Payload
返回一个Uint8Array
. 我猜这是因为它来自一个承诺?
我尝试过这样做Payload.toString()
,但它只是作为Unit8Array
. 示例是:
2021-04-13T14:32:04.874Z worker:success Payload: 123,34,115,116,97,116,117,115,67,111,100,101,34,58,50,48,48,44,34,98,111,100,121,34,58,34,123,92,34,116,111,107,101,110,92,34,58,92,34,103,104,115,95,111,114,101,51,65,109,99,122,86,85,74,122,66,52,90,68,104,57,122,122,85,118,119,52,51,50,111,67,71,48,50,75,121,79,69,72,92,34,125,34,125
我的问题:
如何Unit8Array
将数据从 Lambda 响应中解析为我期望的数据?哪个是 JSON 对象?
我已通过转到 CloudWatch 确认请求的 Lambda(在本例中为 Lambda B)正在正确返回数据。谢谢。
解决方案
好的,我找到了一种方法来让它工作。
您必须指定一个文本编码器:
const asciiDecoder = new TextDecoder('ascii');
然后对其进行解码,使其看起来像这样:
const data = asciiDecoder.decode(Payload);
我在他们的存储库上记录了一个问题,询问为什么模块中不包含它。我将发布有关此方面的任何动态的更新。
推荐阅读
- r - Dplyr 将活动日期数据重塑为每月级别
- java - 如何在 JAVA 中将 HTTP 标头添加到 SOAP 端点 uri?
- java - maven 适用于 windows powershell 和 cmd,但不适用于 git bash
- flutter - 取消 StreamSubscription
- java - 如何在Android Studio中使用Java的应用程序后台执行HttpURLConnection之类的任务?
- java - 单一 Web 服务中的多重传输支持
- c++ - 如何从需要基类指针的函数调用派生类的方法?
- python - django 表 2:将模板 url 硬编码到表行中
- c# - 有没有办法在 C# 表单应用程序上运行“scp”命令
- swift - SwiftUI FetchRequest 错误:“获取请求必须有一个实体”