2017-08-31 13 views
0

APIゲートウェイとDynamoDBを接続するコードを記述しています。それは以下の通りです。データを入れラムダ関数を2つ結合する

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ゲートウェイに、私は資源やメソッドを作成したデータを取得し、機能に対応するにそれらを指摘したが、今私は」私は、function putData()function getData()のような2つのメソッドを持つ共通のラムダ関数を作成し、別のラムダ関数。 HTTP methodhttps://kennbrodhagen.net/2015/12/02/how-to-access-http-headers-using-aws-api-gateway-and-lambda/に従って取得しようとしましたが、if(method==="GET"){...} else {...}と書きましたが、残念ながらメソッド名自体を取得できませんでした。

どうすればいいですか?あなたがリクエストメソッド値を通過することになる、あなたのAPIゲートウェイでのマッピングを追加する必要が

おかげ

答えて

1

カスタムマッピングテンプレートを作成する必要はありません。あなたのリソースの "Integration Request"で、 "Use Lambda Proxy integration"チェックボックスをチェックしてください。

のは、次のようにラムダ関数があるとしましょう:

// NodeJS lambda function 

exports.handler = function(event, context, callback) { 
    // ...your application code... 
}; 

有効「使用ラムダプロキシとの統合」を使用して関数の実行時、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"} 
} 

注:プロキシの統合を使用してながら、ここで概要を述べたように、あなたのラムダ関数コールバックに渡されるデータは、特定のスキーマでフォーマットする必要があります。

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-output-format

{ 
    "isBase64Encoded": true|false, 
    "statusCode": httpStatusCode, 
    "headers": { "headerName": "headerValue", ... }, 
    "body": "..." 
} 
関連する問題