Http Request with AWS Lambda, Node.js 8.10, and Standard http library

June 12, 2018 0 Comments

Http Request with AWS Lambda, Node.js 8.10, and Standard http library

 

 



In my previous article I showed an approach to extend a "traditional" (monolithic architecture) app using AWS Lambda: https://dev.to/scottlepp/extending-traditional-software-with-serverless-microservices-442m

Let's take a closer look at the Lambda function and how to make an http request using Node.js 8.10 and the standard http library.

In previous versions of node.js, the handler function contained a callback argument like so:

exports.handler = function (event, context, callback) { 

And when your http request finished you would execute the callback to indicate the function was finished:

const req = http.request(options, (res) => { callback('Success'); 
});

And yet even older version of node.js didn't have a callback function, instead you would use "context.succeed" like so:

const req = http.request(options, (res) => { context.succeed(); 
});

However, in node.js 8.10 this has changed. The callback argument is again not needed. Now you just wrap your function returning a Promise. Then instead of executing the callback function, you execute the Promise resolve function (or reject function if it fails) as so:

const http = require('http'); exports.handler = async (event, context) => { return new Promise((resolve, reject) => { const options = { host: 'ec2-18-191-89-162.us-east-2.compute.amazonaws.com', path: '/api/repos/r1639420d605/index?delta=true&clear=false', port: 8000, method: 'PUT' }; const req = http.request(options, (res) => { resolve('Success'); }); req.on('error', (e) => { reject(e.message); }); // send the request req.write(''); req.end(); }); 
};

That's it! These changes between versions of node.js tripped me up a bit so I wanted to share the latest method. Hope this helps someone!

Classic DEV Post from Apr 30


Tag cloud