这是aws lambda函数,它将调用api:
'use strict';
exports.handler = function(event, context, callback) {
console.log(event.name);
callback(null, { "isBase64Encoded": true|false,
"statusCode": "200",
"headers": { "headerName": "headerValue"},
"body": `Hello World ${event.name}`}); // SUCCESS with message
};
这是作为aws lambda函数写的api:
message
当我尝试从lambda函数调用api时,它只返回" Hello World undefined"。它不会在末尾添加名称并返回正确的响应。
答案 0 :(得分:3)
假设:
你误解了event
是什么。这不是您通过HTTP请求发送的JSON有效内容。
通过API网关的HTTP请求将转换为类似于此的event
对象:
{
"resource": "Resource path",
"path": "Path parameter",
"httpMethod": "Incoming request's method name"
"headers": {Incoming request headers}
"queryStringParameters": {query string parameters }
"pathParameters": {path parameters}
"stageVariables": {Applicable stage variables}
"requestContext": {Request context, including authorizer-returned key-value pairs}
"body": "A JSON string of the request payload."
"isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}
如您所见,JSON有效负载可在event.body
中以字符串形式访问。
如果要将相同的有效负载发送到第二个Lambda,则必须先解析它。
const body = JSON.parse(event.body)
然后,发送body
而不是event
。
然后,在您的第二个Lambda中,您在event.body
中解析字符串化的JSON,然后返回原始的有效负载。
如果您在原始有效负载中发送了name
,则可以从JSON.parse(event.body).name
获取。
答案 1 :(得分:1)
遇到类似问题并使用记录事件调试到控制台。
添加事件记录,
的console.log(JSON.stringify(事件));
评估如何在API网关中进行映射以进行Lambda集成,并查看post参数的存在位置。
如果帖子值不存在,则在您获得活动中的帖子值之前修复整合。
数据映射API-Lambda网关:
希望它有所帮助。
答案 2 :(得分:0)
我有一些非常相似的问题。尝试在JSON.parse()
上调用event.body
时,出现错误,因为事件已经是我要尝试POST
的对象。我实际上并没有将数据库链接到前端,但是从Lambda和API Gateway进行测试时遇到此错误。
我现在只能从请求中读取对象的示例:
"use strict";
const AWS = require("aws-sdk");
exports.handler = async (event, context) => {
const documentClient = new AWS.DynamoDB.DocumentClient();
let responseBody;
let statusCode;
console.log(event.id) // I have access to dot notation straight from the event
const {id, item, quantity, orderTotal, userId} = event;