n g
n g

Reputation: 1

how to get the first bytes of a file from a given url node.js

I want to a file from a given url, in a aws lambda function. I wrote this code:

exports.handler = (event, context, callback) => {
   var http = require('http');
   var url= "https://mail.google.com/mail/u/0/?ui=2&ik=806f533220&attid=0.1&permmsgid=msg-a:r-8750932957918989452&th=168b03149469bc1f&view=att&disp=safe&realattid=f_jro0gbqh0"

   //var client = http.createClient(80, url);
   var request = http.request({
     port: 80,
     host: url
   });

   request.on('response', function( res ) {
      res.on('data', function( data ) {
         console.log(data);     
      });
   });
   request.end();

   const result = {
      statusCode: 200,
      body: JSON.stringify('Hello from Lambda!'),
   };

   callback(null, result);
};

but I get an error saying:

"Response: {
   "errorMessage": "RequestId: 52baec5e-60bc-47ea-911e-8e6cb1d2f1da Process exited before completing request"
}"

since I only need the first 2 bytes' I thought maybe I should read them, and not the whole file.

any ideas?

thanks a lot!

Upvotes: 0

Views: 770

Answers (2)

Carlos Jafet Neto
Carlos Jafet Neto

Reputation: 891

I usually do this with fetch or request. You can make it with request like this:

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

var request = require('request');
var url= "https://mail.google.com/mail/u/0/?ui=2&ik=806f533220&attid=0.1&permmsgid=msg-a:r-8750932957918989452&th=168b03149469bc1f&view=att&disp=safe&realattid=f_jro0gbqh0"

request(url, { json: true, timeout: 1000 }, (err, response, body) => {
    if (err) { 
        console.log(err);
        callback(err, null);
    } else {
        console.log(body);
        callback(null, "Hello from Lambda");
    }
});

}; 

Just run npm install request to get module request and you are good to go.

It is always a good idea to start with your local development environment and when everything is ready, you just zip your files and then upload them to lambda. This way you know everything is just fine with your code and you can focus on the lambda configuration details. This way it much easier to test and you do not consume any lambda resource.

This is how to upload your file to lambda:

enter image description here

Upvotes: 0

Carlos Jafet Neto
Carlos Jafet Neto

Reputation: 891

enter image description hereDid you increase your lambda execution Timeout limit? When you first created, lambda comes setted with only 3 seconds by default. You can change that under Basic settings. Change Timeout to 2 or 3 minutes to allow your lambda to finish execution. Also check if your memory is enough. You may need to increase it a little bit. I have mine with 256 MB.

When you test your lambda, pay attention at the Duration and Memory Size values. Lambda will print that in the last line of the log output. So if you set your lambda execution Timeout to 5 minutes and it only takes 2 minutes or if your lambda Memory Size is to close to your Memory you might want to increase it so your lambda do not fail execution due to a memory problem.

Upvotes: 2

Related Questions