2017-09-26 13 views
0

これでAPI呼び出しますAWSラムダ関数:これはAWSラムダ関数として書かれたAPIであるNodejs APIコールはラムダ関数にundefinedを返し

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

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

I単に "Hello World undefined"を返すラムダ関数からAPIを呼び出そうとします。最後に名前を追加しておらず、正しい応答を返していません。

+0

console.log(event.name);このログeven.nameは適切ですか? –

+0

@VijayanathViswanathanはい – RagingBull

+0

'console.log(event.name)'は動作しますが、 '$ {event.name}'は動作しません。何かがおかしい。 – dashmug

答えて

1

前提:あなたはラムダ・プロキシの統合を使用している

  • あなたが最初のラムダが第二ラムダに受信まったく同じペイロードを渡したい。*

あなたはeventが何であるかを誤解しています。これは、HTTPリクエストで送信したJSONペイロードではありません。

API Gatewayを介して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で文字列化形式でアクセス可能です。

同じペイロードを2番目のラムダに送信する場合は、最初に解析する必要があります。

const body = JSON.parse(event.body) 

その後、body代わりのevent送ります。

次に、2番目のラムダで、文字列化されたJSONをevent.bodyで解析して元のペイロードを元に戻します。

元のペイロードに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

+0

まだ動作していません – RagingBull

+0

上記の両方のconsole.logステートメントは正常に動作しています。これは何ですか?JSON.parse(event)is nit私はそれが既にオブジェクトであることを意味するエラーを表示して以来私を助けています。私はラムダコンソールでAPIをテストしていますそれは正しい応答を与えていますが、ブラウザーや他のラムダ関数から呼び出している間、Hello worldは未定義です。 – RagingBull

+0

私は、渡されているjsonで編集を行った – RagingBull

0

は、同様の問題を抱えていたし、コンソールへのロギングイベントでデバッグ。

は、イベントに

はconsole.log(JSON.stringify(イベント))のログを追加します。

あなたのAPI-GatewayとLambdaの統合でどのようにマッピングが行われたかを評価し、postパラメータがどこにあるのかを確認します。

ポスト値がない場合は、イベントでポスト値を取得するまで統合を修正します。ラムダへ

データマッピングAPI-ゲートウェイ:

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

はそれがお役に立てば幸いです。

+0

それは動作していない – RagingBull

+0

何が動作していないのですか?コンソールログ? – Kannaiyan

+0

上記のconsole.logステートメントの両方がうまく動作しています。これは私が意味していたことです:JSON.parse(イベント)はエラーです。つまり、既にオブジェクトであることを示しています。私はlambdaコンソールでapiをテストしているとき、正しい応答を出していますが、ブラウザーや別のラムダ関数から呼び出すと、Hello world undefinedが表示されます。 – RagingBull

関連する問題