2017-02-16 9 views
-1

Я новый разработчик в node.js, и я хочу написать небольшую лямбда-функцию (в node.js), которая загружает файл PDF (с жесткого диска) в ведро Amazon S3.Как написать простую функцию лямбда для загрузки pdf в Amazon S3?

Вот мой код:

// dependencies 
var util = require('util'); 
var fs = require('fs'); 

exports.handler = function (req, res) { 
    var file = req.files.file; 
    fs.readFile("‪C:\\Users\\zack\\Downloads\\test.pdf", function (err, data) { 
     if (err) throw err; // Something went wrong! 
     var s3bucket = new AWS.S3({params: {Bucket: 'myBucket3'}}); 
     s3bucket.createBucket(function() { 
      var params = { 
       Key: file.originalFilename, //file.name doesn't exist as a property 
       Body: data 
      }; 
      s3bucket.upload(params, function (err, data) { 
       // Whether there is an error or not, delete the temp file 
       fs.unlink("‪C:\\Users\\zack\\Downloads\\test.pdf", function (err) { 
        if (err) { 
         console.error(err); 
        } 
        console.log('Temp File Delete'); 
       }); 

       console.log("PRINT FILE:", file); 
       if (err) { 
        console.log('ERROR MSG: ', err); 
        res.status(500).send(err); 
       } else { 
        console.log('Successfully uploaded data'); 
        res.status(200).end(); 
       } 
      }); 
     }); 
    }); 
}; 

Функция лямбда показывает мне сообщение об ошибке:

"errorMessage": "RequestId: 05024c81-f44b-11e6-a45e-57b13036ad96 Process exited before completing request" 

И в cloudwatch:

START RequestId: e66a7653-f44b-11e6-8b1a-c511605a533b Version: $LATEST 
2017-02-16T13:29:11.133Z e66a7653-f44b-11e6-8b1a-c511605a533b TypeError: Cannot read property 'file' of undefined 
    at exports.handler (/var/task/invoices3/invoices3.js:17:25) 
END RequestId: e66a7653-f44b-11e6-8b1a-c511605a533b 
REPORT RequestId: e66a7653-f44b-11e6-8b1a-c511605a533b Duration: 27.82 ms Billed Duration: 100 ms  Memory Size: 1024 MB Max Memory Used: 23 MB 
RequestId: e66a7653-f44b-11e6-8b1a-c511605a533b Process exited before completing request 

Можете ли вы сказать мне, где проблема пожалуйста ?? Я вообще не разбираюсь в node.js.

Спасибо заранее!

ответ

0

Процесс завершился до завершения запроса

Вы получаете это сообщение, потому что вы никогда не уведомляя Lambda, что функция завершена. Вам нужно либо вызвать функцию context.succeed(), как только вы закончите, либо update your code, чтобы использовать новый метод callback(), и позвоните, когда вы закончите.