Http Request with AWS Lambda, Node.js 8.10, and Standard http library
Scott Lepper
Posted on June 10, 2018
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!
Posted on June 10, 2018
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.