2017-09-25 19 views
0

node.jsにapi(post)を呼び出し、結果のボディを返すラムダを書くと、コードは以下のようになります。apigatewayを使用して外部APIを呼び出す

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); 
     } 
    }); 
} 

私のラムダコンソールで同じことをテストしています。空白のjson {}を渡して、正しい応答を返します。

私の次の計画は、この作品をAPIゲートウェイと統合することです。だから私はapigatewayのためにこれのためのAPIを作成し、それで、homeという名前のリソースを作成しました。家ではGETメソッドを作成しました。以下の詳細と一緒に。

私はapigatewayによって与えられた testオプションを使用してこれをテストし
Integration type: Lambda Function 
Use Lambda Proxy integration : checked 
Lambda Region: us-east-1 
Lambda Function: myWorkingLambdaName 

。私は

Request: /home 
Status: 502 
Latency: 2942 ms 
Response Body 
{ 
    "message": "Internal server error" 
} 

私は私のコンソールは、私が印刷された成功のブロックの値を参照しますが、ステータスコードが502である。これは非常に混乱して見たとき、私は間違っているつもりどこに私が知っているとどのようにしてくださいとしての応答を取得しますこれを修正できますか?

おかげGatewayは、次のプロパティは、あなたのラムダから返されることを期待し

答えて

3

API:

callback(null, { 
    isBase64Encoded: false, 
    statusCode: 200, 
    headers: { 
     "Access-Control-Allow-Origin" : "*", 
    }, 
    body: JSON.stringify(jsonBody), 
}) 
:だから

{ 
    "isBase64Encoded": true|false, 
    "statusCode": httpStatusCode, 
    "headers": { "headerName": "headerValue", ... }, 
    "body": "..." 
} 

は、代わりにcallback(null, jsonBody)、あなたはこのようなcallbackを呼び出すべきです

関連する問題