Node.js中如何从Lambda函数回调返回值中提取Body?
如何从Lambda调用的返回结果中提取Body内容
看起来你已经离解决问题很近了!现在的问题是你解析完Payload后,还需要再深入一层提取Body字段,而且如果你的返回内容是PDF这类二进制数据,可能还要做base64解码。我来帮你调整代码并解释清楚:
首先,先修正你的代码逻辑,让变量名更清晰,然后一步步提取Body:
const lambdaResponse = await new Promise((resolve, reject) => { lambda.invoke(params, function(err, data) { if (err) { console.log('STACK ERROR IS' + err, err.stack) reject(err); } else { console.log('Returned DATA is: ' + JSON.stringify(data)); resolve(data); } }); }); Prescription.deletePrescription(programId); // 第一步:解析Lambda返回的Payload(它本身是JSON字符串) const parsedPayload = JSON.parse(lambdaResponse.Payload); // 第二步:提取Body字段 - 注意这里的大小写要和你的Lambda函数返回的字段一致! // 如果你的Lambda返回的是小写的`body`,就改成parsedPayload.body const pdfBodyContent = parsedPayload.Body; // 第三步:如果你的Lambda返回的是PDF二进制数据(通常会转成base64字符串),解码成Buffer const pdfBuffer = Buffer.from(pdfBodyContent, 'base64'); // 现在你就可以用pdfBuffer来处理PDF内容了,比如保存到S3或者返回给前端
关键说明:
- Lambda函数调用返回的
data.Payload本质是Lambda函数本身返回内容的JSON字符串,所以你需要先JSON.parse把它转成JS对象。 - 你的Lambda函数内部应该是返回了包含
Body(或body)字段的对象,比如Lambda里的代码可能是这样的:// 示例Lambda函数返回逻辑 exports.handler = async (event) => { // 生成PDF的Buffer const generatedPdf = await createYourPdf(); return { statusCode: 200, Body: generatedPdf.toString('base64'), // 把二进制Buffer转成base64字符串便于传输 isBase64Encoded: true }; }; - 如果你的Lambda返回的Body是普通JSON数据而不是二进制,那你只需要再做一次
JSON.parse(pdfBodyContent)就能拿到实际的数据对象。
最后提醒你,一定要确认Lambda返回的字段名大小写(是Body还是body),这是很容易踩坑的点!
内容的提问来源于stack exchange,提问作者Taylorsuk
相关产品推荐
相关产品推荐

