2017-10-05 49 views
2

我想將查詢參數從API網關傳遞到AWS Lambda,但我總是收到null值。無法讀取AWS中的查詢參數

這是我的Lambda函數,我只想返回http://foo.bar的值? 名=丹

'use strict'; 

exports.handle = (context, event, callback) => { 
    callback(null, event.name); 
} 

在API網關我也做了以下內容:

  1. 創建資源
  2. 創建方法(GET
  3. 選擇了正確的lambda函數
  4. 選擇我的GET方法並點擊Integration Request
  5. 選擇Body Mapping Templates
  6. 集的Content-Type到application/json
  7. 新增{"name": "$input.params('name')" }
  8. 保存和部署!

但是,當我加載我的API時,event.name的值總是null。訪問API通過...amazonaws.com/beta/user?name=dan

編輯完成的:我已經試過接受的答案here但畢竟只是在回調返回時,我只收到此數據:

{ 
    "callbackWaitsForEmptyEventLoop": true, 
    "logGroupName": "", 
    "logStreamName": "", 
    "functionName": "", 
    "memoryLimitInMB": "", 
    "functionVersion": "", 
    "invokeid": "", 
    "awsRequestId": "", 
    "invokedFunctionArn": "" 
} 

我省略了值。

回答

3

函數參數爲contextevent位置是錯誤的。更改它們的位置如下

'use strict'; 

exports.handle = (event, context, callback) => { 
    callback(null, event.name); 
} 
+0

呃,這樣一個愚蠢的錯誤!非常感謝你。 – Dan

+0

不客氣。 –

+0

好點的伴侶:)。想給10 upvote,但它只允許一個:) –

2

即使我之前有同樣的問題,我已經修改了身體映射模板,如下所示。請嘗試一下。

#set($inputRoot = $input.path('$')) 
{  
"name" : "$input.params('$.name')" 
} 

如果您使用路徑參數,那麼請嘗試以下,

#set($inputRoot = $input.path('$')) 
{ 
"name" : "$input.path('$.name')" 
} 
+0

在我的回調函數中使用'event.name'時,我仍然得到'null'值。 – Dan

+0

你使用路徑參數或查詢字符串嗎? –

+0

我試圖從查詢字符串訪問變量所以/ beta/user?name = Dan - 我想訪問'name' – Dan