[英]Nodejs API call returning undefined to lambda function
这是将调用 api 的 aws lambda 函数:
'use strict';
var request = require("request")
exports.handler = function (event, context,callback) {
let url = "https://3sawt0jvzf.execute-api.us-east-1.amazonaws.com/prod/test"
request({
url: url,
method: "POST",
json: event,
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
callback(null, { "isBase64Encoded": true|false,
"statusCode": "200",
"headers": { "headerName": "headerValue"},
"body": body});
}
else {
console.log("error: " + error)
console.log("response.statusCode: " + response.statusCode)
console.log("response.statusText: " + response.statusText)
}
})
};
这是编写为 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
};
当我尝试从 lambda 函数调用 api 时,它只返回“Hello World undefined”。 它不会在末尾附加名称并返回正确的响应。
假设:
你误解了什么是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"
}
如您所见,可以在event.body
中以字符串化形式访问 JSON 有效负载。
如果要将传递相同的有效负载发送到第二个 Lambda,则必须先对其进行解析。
const body = JSON.parse(event.body)
然后,发送body
而不是event
。
然后,在您的第二个 Lambda 中,您解析event.body
的字符串化 JSON,然后取回原始负载。
如果您在原始负载中发送了name
,则可以从JSON.parse(event.body).name
获取它。
参考: http : //docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
有一个类似的问题,并通过将事件记录到控制台进行调试。
添加事件日志,
console.log(JSON.stringify(event));
评估如何在 API-Gateway 中完成映射到 Lambda 集成,并查看 post 参数存在的位置。
如果帖子值不存在,请修复集成,直到您在事件中获得帖子值。
数据映射 API 网关到 Lambda:
希望它有帮助。
我有一些非常相似的问题。 当尝试在event.body
上调用JSON.parse()
时,我收到一个错误,因为 event 已经是我尝试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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.