2016-05-25 5 views
2

Ich versuche, wie in callbackname zurückzukehren JSONP (data.strified)Return JSONP über AWS Lambda/API-Gateway

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

Meine schnelle und schmutzige Art und Weise kehrt nun die Daten und wenn? Cb = Test gegeben ist es gibt zurück:

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

Gibt es sowieso die Zitate und Escape-Zeichen loswerden? Die API sollte mit und ohne Callback-Set funktionieren.

+0

ich die gleiche Frage haben ... Haben Hast du irgendein Update? Danke @ Tobias! –

+0

siehe Antwort, ich denke, das ist der einfachste Weg. – Tobias

+0

@IgnacioOcampo hast du eine Lösung dafür? :) – Tobias

Antwort

3

Vorausgesetzt, dass Sie diese Art von Lambda-Funktion haben:

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

Wenn Sie es ein Ereignis geben, wie

{ 
    "cb": "callback" 
} 

Es wird diese Ausgabe geben:

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

Bisher , so gut. Nun kommen Sie auf API-Gateway und in Integration Response-Teil schreiben Sie diese

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

als Sie callback({"test":"data"}) als Ausgabe erhalten, wenn Sie das API-Gateway-Endpunkt aufrufen.

+0

Dies funktionierte gut für uns. Vielen Dank! –

1

Sie können dazu eine Integrationszuordnungsvorlage verwenden. So etwas sollte dir helfen, den Json zu parsen.

Here sind weitere Details zu Mapping-Vorlagen.

+0

Wie würde ich die Integrationszuordnungsvorlage einrichten? Ich habe das oben schon irgendwie gemacht aber es gibt jetzt nichts aus ... würde das auch json und jsonp unterstützen? wie in reinen Daten vs Daten in Funktionsname eingewickelt – Tobias

1

Wie Çağatay Gürtürk darauf hingewiesen hat, stringierst du dein Ergebnis und gibst es zurück.

Allerdings, wenn Ihr Lambda auch nicht Rückrufe akzeptiert, können Sie in der VTL-Vorlage prüfen:

API-Gateway und in Integration Response-Teil:

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