Estoy enviando un formulario a una función Lambda implementada por serverless, aquí está el yml:
functions: hello: handler: handler.hello events: - http: POST helloAhora mi función hola es:
module.exports.hello = (event, context, callback) => { const response = { statusCode: 200, body: JSON.stringify({ message: 'Go Se222rverless v1.0! Your function executed successfully!', input: event, }), }; callback(null, response); };Puedo ver en el resultado que se pasaron las variables, pero están almacenadas en la propiedad event.body como tales:
"body":"email=test%40test.com&password=test12345"Ahora puedo acceder a esta cadena, pero no puedo leer variables individuales de ella, a menos que haga alguna transformación de expresiones regulares que, creo, no sería el caso en una pila tan moderna como serverless/aws.
¿Qué me estoy perdiendo? ¿Cómo leo las variables individuales?
Parece que su terminal sin servidor está recibiendo datos con Content-Type: application/x-www-form-urlencoded . Puede actualizar la solicitud para usar datos JSON en su lugar para acceder a las variables de publicación de la misma manera que lo haría con otros objetos de JavaScript.
Asumiendo que esto no es una opción; aún puede acceder a los datos del cuerpo de su publicación utilizando el módulo de cadena de consulta del nodo para analizar el cuerpo de la solicitud, aquí hay un ejemplo:
const querystring = require('querystring'); module.exports.hello = (event, context, callback) => { // Parse the post body const data = querystring.parse(event.body); // Access variables from body const email = data.email; ... }Solo recuerde si algunos de los parámetros en el cuerpo de la publicación usan nombres que son identificadores de objetos de JavaScript no válidos para usar la notación de corchetes, por ejemplo:
const rawMessage = data['raw-message'];Puede usar un módulo de querystring de consulta Node para analizar el cuerpo POST.
La documentación del controlador para los diversos modelos de programación implica que el tipo de evento de API Gateway es un flujo de bajo nivel. Eso significa que debe usar otros métodos para extraer el contenido del cuerpo del POST.
{ "resource": "Resource path", "path": "Path parameter", "httpMethod": "Incoming request's method name" "headers": {Incoming request headers} "queryStringParameters": {query string parameters } "pathParameters": {path parameters} "stageVariables": {Applicable stage variables} "requestContext": {Request context, including authorizer-returned key-value pairs} "body": "A JSON string of the request payload." "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode" }Dotnet Solo el tipo System.IO.Stream se admite como parámetro de entrada de forma predeterminada.
Evento de Python: este parámetro suele ser del tipo dictado de Python. También puede ser de tipo list, str, int, float o NoneType.