我正在node.js中编写一个lambda,它将调用api(post)并返回生成的主体,代码如下所示。
const AWS = require('aws-sdk');
const request = require('request');
exports.handle = function(e, ctx, callback) {
var bodyDetails = {
uri: "myURL",
json: {
"requestChannel": "web1" },
"method": "POST"
};
callback = ctx.done;
var data = e.bodyJson || {};
request(bodyDetails, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log(JSON.parse(JSON.stringify(body)));
jsonBody = JSON.parse(JSON.stringify(body));
console.log(body + "\t from suvccess") // Print the json response
callback(null, jsonBody); // Return the JSON object back to our API call
} else {
callback(error);
}
});
}
我正在我的lambda控制台中测试它。通过传递一个空白的json {}
,我得到了正确的回复。
现在我的下一个计划是将此部分与API Gateway集成。所以我在我的apigateway
中为此创建了一个api,并且我创建了一个名为home
的资源。在家里,我创建了一个GET
方法。以下详细信息。
Integration type: Lambda Function
Use Lambda Proxy integration : checked
Lambda Region: us-east-1
Lambda Function: myWorkingLambdaName
当我使用apigateway提供的test
选项进行测试时。我得到了回复
Request: /home
Status: 502
Latency: 2942 ms
Response Body
{
"message": "Internal server error"
}
当我看到我的控制台时,我看到打印成功块的值,但状态码是502.这非常令人困惑,请告诉我哪里出错了,我该如何解决这个问题。
由于
答案 0 :(得分:3)
API Gateway期望从Lambda返回以下属性:
{
"isBase64Encoded": true|false,
"statusCode": httpStatusCode,
"headers": { "headerName": "headerValue", ... },
"body": "..."
}
因此,您应该像callback(null, jsonBody)
一样调用callback
而不是callback(null, {
isBase64Encoded: false,
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*",
},
body: JSON.stringify(jsonBody),
})
:
"87987987 / 78979878978"