结合两个lambda函数
我正在编写将连接API网关和DynamoDB的代码。他们如下。结合两个lambda函数
将数据
var body = JSON.parse(event.body);
console.log(body.phone)
var table = "userAddresses";
var params = {
TableName: table,
Item: {
"phone": body.phone,
"apartmentNumber": body.apartmentNumber,
"buildingNumber": body.buildingNumber,
"state": body.state,
"zip": body.zip
}
}
docClient.put(params, function (err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
var res = {
"statusCode": 200,
"headers": {},
"body": JSON.stringify(data)
};
context.succeed(res);
}
});
获取数据
var body = JSON.parse(event.body);
console.log(body.phone)
var table = "userAddresses";
var params = {
TableName: table,
Item: {
"phone": body.phone
}
}
docClient.get(params, function (err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
var res = {
"statusCode": 200,
"headers": {},
"body": JSON.stringify(data)
};
context.succeed(res);
}
});
而在我的API网关我创建的资源和方法,并指出他们相应的功能,但现在我m想用2种方法创建一个通用的lambda函数,如function putData()
和function getData()
,并将它们指向适当的方法,而不是指向不同的方法Lambda函数。我试图通过遵循https://kennbrodhagen.net/2015/12/02/how-to-access-http-headers-using-aws-api-gateway-and-lambda/获得HTTP method
,然后写为if(method==="GET"){...} else {...}
,但不幸的是,我无法获取方法名称本身。
请帮我一下,我该如何做到这一点。
感谢
你有你的API网关将通过请求方法值添加映射。这可能会在每个端点的映射中被硬编码。
确切的添加方式取决于当前映射的结构。
本指南应该是一个有益的起点:http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-mappings.html
没有必要创建自定义的映射模板。在资源的“集成请求”中,请确保选中“使用Lambda代理集成”复选框。
比方说,你lambda函数如下:
// NodeJS lambda function
exports.handler = function(event, context, callback) {
// ...your application code...
};
随着“使用LAMBDA代理一体化”的启用,event
参数将包括HTTP请求的细节你的函数执行时。然后,您将有机会获得event.httpMethod
: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format
// Sample `event` for GET request
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {"proxy": "hello"},
"requestContext": {
"accountId": "123456789012",
"resourceId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"accountId": "",
"sourceIp": "192.168.100.1",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"resourcePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"resource": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {"name": "me"},
"stageVariables": {"stageVarName": "stageVarValue"}
}
注:在使用代理服务器的整合,传递给lambda函数回调的数据必须在一个特定的模式被格式化,所列出的位置:
{
"isBase64Encoded": true|false,
"statusCode": httpStatusCode,
"headers": { "headerName": "headerValue", ... },
"body": "..."
}