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.