Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS Lambda HTTP POST Request (Node.js)

I'm relatively new to AWS lambda function and nodejs. I'm working on to try and get the list of 5 cities in a country by using HTTP POST request from this website: "http://www.webservicex.net/globalweather.asmx?op=GetCitiesByCountry"

I've been searching about how to do a HTTP POST request in lambda function but I can't seem to find a good explanation for it.

Searches that I found for http post:

https://www.npmjs.com/package/http-post How to make an HTTP POST request in node.js?

like image 836
Misuti Avatar asked Nov 21 '17 02:11

Misuti


1 Answers

I think that the cleaner and more performant way, without the need for externals libs can be something like this:

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}`));
};

This lambda has been made and tested on the following Runtimes: Node.js 8.10 and Node.js 10.x and is able to do HTTPS requests, to do HTTP requests you need to import and change the object to http:

const http = require('http');
like image 131
valdeci Avatar answered Nov 11 '22 06:11

valdeci