如何从给定的URL node.js获取文件的第一个字节

时间:2019-02-02 22:25:04

标签: node.js url

我想通过aws lambda函数从给定的URL中获取文件。 我写了这段代码:

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

但我收到一条错误消息:

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

因为我只需要前2个字节,我想也许我应该阅读它们,而不是整个文件。

有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

enter image description here您是否增加了Lambda执行量超时限制?首次创建时,默认情况下将lambda设置为仅3秒。您可以在基本设置下进行更改。将超时更改为2或3分钟,以使您的Lambda完成执行。同时检查您的内存是否足够。您可能需要增加一点。我有256 MB。

测试lambda时,请注意持续时间内存大小值。 Lambda将在日志输出的最后一行中打印出来。因此,如果您将Lambda执行超时设置为5分钟且仅需2分钟,或者您的Lambda内存大小接近于 Memory ,则可能需要增加它,以使Lambda不会因执行失败而失败内存问题。

答案 1 :(得分:0)

我通常通过获取或请求来执行此操作。您可以通过这样的请求来做到这一点:

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

}; 

只需运行 npm安装请求即可获取模块请求,您就可以开始了。

从本地开发环境开始总是一个好主意,当一切准备就绪时,您只需压缩文件,然后将其上传到lambda。这样,您就知道代码一切都很好,并且您可以专注于lambda配置细节。这样一来,测试变得更加容易,而且您不会消耗任何lambda资源。

这是将文件上传到lambda的方法:

enter image description here