Saltar al contenido

Solicitud HTTP POST de AWS Lambda (Node.js)

Si te encuentras con algo que no entiendes puedes dejarlo en los comentarios y haremos todo lo necesario de ayudarte lo mas rápido que podamos.

Solución:

Tuve dificultades para implementar las otras respuestas, así que estoy publicando lo que funcionó para mí.

En este caso, la función recibe datos de URL, ruta y publicación.

función lambda

var querystring = require('querystring');
var http = require('http');

exports.handler = function (event, context) 
var post_data = querystring.stringify(
      event.body
  );

  // An object of options to indicate where to post to
  var post_options = 
      host: event.url,
      port: '80',
      path: event.path,
      method: 'POST',
      headers: 
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': Buffer.byteLength(post_data)
      
  ;

  // Set up the request
  var post_req = http.request(post_options, function(res) 
      res.setEncoding('utf8');
      res.on('data', function (chunk) 
          console.log('Response: ' + chunk);
          context.succeed();
      );
      res.on('error', function (e) 
        console.log("Got error: " + e.message);
        context.done(null, 'FAILURE');
      );

  );

  // post the data
  post_req.write(post_data);
  post_req.end();


Ejemplo de parámetros de llamada

   
      "url": "example.com",      
       "path": "/apifunction",
       "body":  "data": "your data"  <-- here your object
    

Creo que la forma más limpia y de mayor rendimiento, sin la necesidad de librerías externas, puede ser algo como esto:

const https = require('https');

const doPostRequest = () => 

  const data = 
    value1: 1,
    value2: 2,
  ;

  return new Promise((resolve, reject) => 
    const options = 
      host: 'www.example.com',
      path: '/post/example/action',
      method: 'POST',
      headers: 
        'Content-Type': 'application/json'
      
    ;
    
    //create the request object with the callback with the result
    const req = https.request(options, (res) => 
      resolve(JSON.stringify(res.statusCode));
    );

    // handle the possible errors
    req.on('error', (e) => 
      reject(e.message);
    );
    
    //do the request
    req.write(JSON.stringify(data));

    //finish the request
    req.end();
  );
;


exports.handler = async (event) => 
  await doPostRequest()
    .then(result => console.log(`Status code: $result`))
    .catch(err => console.error(`Error doing the request for the event: $JSON.stringify(event) => $err`));
;

Esta lambda se ha creado y probado en los siguientes tiempos de ejecución: Node.js 8.10 y Node.js 10.x y es capaz de hacer solicitudes HTTPS, para hacer solicitudes HTTP necesita importar y cambiar el objeto a http:

const http = require('http');

Pruebe el siguiente ejemplo, invocando la solicitud HTTP GET o POST en nodejs de AWS lambda

const options = 
        hostname: 'hostname',
        port: port number,
        path: urlpath,
        method: 'method type'
    ;

const req = https.request(options, (res) => 
    res.setEncoding('utf8');
    res.on('data', (chunk) => 
      // code to execute
    );
    res.on('end', () => 
      // code to execute      
    );
);
req.on('error', (e) => 
    callback(null, "Error has occured");
);
req.end();

Considere la muestra

Si te apasiona la programación, eres capaz de dejar un post acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *