2016-05-25 119 views
2

我想在callbackname(data.strified)返回JSONP通過AWS LAMBDA返回JSONP/API網關

callback(null, 
    (!!event.cb && event.cb.length > 0) 
    ? event.cb.replace(/[^a-z0-9_]/i, '') + '(' + JSON.stringify(data) + ')' 
    : data 
); 

我的快速和骯髒的方式現在返回的數據,如果?CB =測試給予它返回:

"test({\"valid\":false,\"data\":false})" 

有無論如何擺脫引號和轉義字符? 該API應該可以在沒有回調集的情況下使用。

+0

我有同樣的問題...執行你有任何更新?謝謝@Tobias! –

+0

看到答案,我認爲這是最簡單的方法。 – Tobias

+0

@IgnacioOcampo你有一個解決方案嗎? :) – Tobias

回答

3

既然你有這種類型的lambda表達式的:當你給它像

{ 
    "cb": "callback" 
} 

事件將會給這個輸出

exports.handler = function(event, context) { 
    var data={"test":"data"}; 
    context.done(null, 
      (!!event.cb && event.cb.length > 0) 
      ? event.cb.replace(/[^a-z0-9_]/i, '') + '(' + JSON.stringify(data) + ')' 
      : data 
    ); 
}; 

"callback({\"test\":\"data\"})" 

到目前爲止, 太好了。現在你來到API網關和合並響應部分,你寫這

$util.parseJson($input.json('$')) 

比你會得到callback({"test":"data"})爲輸出,當你調用API網關端點。

+0

這對我們來說非常有用。謝謝! –

1

您可以使用集成映射模板來執行此操作。像這樣的東西應該可以幫助你解析Json。

$util.parseJson($input.json('$')) 

Here是關於映射模板的更多細節。

+0

我將如何設置集成映射模板?我有點已經做了上述,但它現在沒有輸出......也會支持json和jsonp?就像純數據和函數名中包含的數據一樣 – Tobias

1

正如ÇağatayGürtürk指出的那樣,您將結果串聯起來並返回。

API網關和合並響應部分:

但是,如果你的拉姆達也接受非回調,可以在VTL模板檢查

#if($input.params('callback') != "") 
$util.parseJson($input.json('$')) 
#else 
$input.json('$') 
#end