So übergeben Sie einen Parameter von POST an AWS Lambda von Amazon API Gateway
In dieser Frage Gewusst wie: übergeben Sie ein querystring-Parameter oder die parameter der route zu AWS Lambda von Amazon API-Gateway
zeigt, wie map-query-string-Parameter zu AWS lambda-API-gateway. Ich möchte das gleiche zu tun, aber mapping-POST-Werte anstelle der query-string. Ich habe versucht:
{
"values": "$input.params()"
}
aber hat nicht funktioniert, ich sehe nicht den eigentlichen Formular-Daten. BTW ich bin Entsendung mit:
application/x-www-form-urlencoded
Ich meine Antwort von meinem lambda-Funktion, damit ich weiß, es ist das lambda in Ordnung, aber mein problem ist, dass ich nicht sehen, die POST-params überall. Ich kann;t herauszufinden, wie man diese zuordnen. Ich dump alles, was ich bekommen auf der Lambda-Seite, und hier ist es:
{"values":"{path={}, querystring={}, header={Accept=*/*, Accept-Encoding=gzip, deflate, Accept-Language=en-US,en;q=0.8, Cache-Control=no-cache, CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, CloudFront-Viewer-Country=US, Content-Type=application/x-www-form-urlencoded, Origin=chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop, Postman-Token=7ba28698-8753-fcb1-1f48-66750ce12ade, Via=1.1 6ba5553fa41dafcdc0e74d152f3a7a75.cloudfront.net (CloudFront), X-Amz-Cf-Id=sc8C7dLcW0BHYopztNYrnddC0hXyFdBzHv0O9aWU1gKhd1D_J2HF3w==, X-Forwarded-For=50.196.93.57, 54.239.140.62, X-Forwarded-Port=443, X-Forwarded-Proto=https}}"}
InformationsquelleAutor der Frage ecorvo | 2015-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gute Antwort von r7kamura. Zusätzlich Hier ist ein Beispiel für eine verständliche und robuste mapping-Vorlage für
application/x-www-form-urlencoded
für alle Fälle (vorausgesetzt, POST):Wäre es transformieren einen input von
in
Lambda-handler könnte es so zu benutzen (das gibt alle input-Daten):
InformationsquelleAutor der Antwort Marcus Whybrow
Können Sie konvertieren Sie beliebige request-body die Daten in gültige JSON-format durch Konfiguration der mapping-Vorlagen in der integration-Einstellungen, so dass AWS Lambda kann es erhalten.
Derzeit scheint es Amazon-API-Gateway nicht unterstützt, application/x-www-form-urlencoded offiziell noch nicht, aber avilewin gepostet eine Lösung zu tun, die auf der AWS-Foren. In der mapping-Vorlagen, die Sie verwenden können,Velocity Template Language (VTL)also, was Sie tun müssen, ist die Konfiguration der mapping-Vorlagen, konvertieren, application/x-www-form-urlencoded-format in ein gültiges JSON-format. Natürlich ist das eine schmutzige Lösung, aber ich denke, es ist der einzige Weg, das zu tun, für jetzt.
InformationsquelleAutor der Antwort r7kamura
Können Sie konvertieren die Parameter in JSON mit einem API-gateway-template:
https://forums.aws.amazon.com/thread.jspa?messageID=673012&tstart=0#673012
Oder Sie können dies tun, in der lambda-Funktion selbst mit QueryString-parser-pacakge: https://www.npmjs.com/package/qs
Wenn Amazon fügt eingebaute Unterstützung für eine solche Funktion habe ich benutzt, aber bis dahin ich persönlich bevorzuge den zweiten Weg, denn es ist sauberer und einfacher zu Debuggen, wenn etwas schief geht.
Update Juli 2017:
Können Sie verwenden proxy-integration, unterstützt es standardmäßig:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
InformationsquelleAutor der Antwort advncd
Wenn Sie aktivieren Lambda-Proxy-Integration
Des POST-body wird angeboten von:
GET-Parameter und-Header wird ebenfalls verfügbar sein über
InformationsquelleAutor der Antwort Jonathan
Ich implementiert eine API, mit der POST Anfragen wo
Content-Type
warapplication/x-www-form-urlencoded
. Wenn Sie nur daran interessiert, eine lange querystring-Werten ähnlich wie GET-Anfragen, dann nutzen Sie dieses mapping syntax.Beachten, können Sie weitere Zuordnungen zu... ich Links, dass es um das ursprüngliche problem.
Hier ein blog-tutorial , die ich verwendet, wenn ursprünglich die Umsetzung meiner API. Meine lambda-Funktion parst dann den querystring übergibt die Daten auf andere Prozesse.
InformationsquelleAutor der Antwort openwonk
Fand ich eine wirklich einfache Lösung, die ich denke, es ist Wert zu teilen, denn es nahm mir ein wenig Zeit zu finden, diese minimalen, arbeitenden code.
Wenn Sie ein gemeinsames Formular, das senden von Daten mit content-type application/x-www-form-urlencoded, nur flag "Lambda-proxy-integration", dann finden Sie codierter form Daten in event.Körper, die kann analysiert werden, mit Node.js querystring-native-Modul.
InformationsquelleAutor der Antwort Gianluca Casati
Dies funktioniert mit lambda-integration.
Vorausgesetzt, Ihr POST-request-body ist z.B.
Können Sie darauf zugreifen, etwa so :
Weitere Infos hier : http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
InformationsquelleAutor der Antwort Dodi