2017-02-16 9 views
-1

私はnode.jsの新しい開発者です。(ハードドライブから)Amazon S3バケットにpdfファイルをアップロードする少しのラムダ関数(node.js)を書きたいと思います。ここでAmazon S3でpdfをアップロードするための単純なラムダ関数を書くには?

は私のコードです:

// 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

プロセスを使用すると、関数が完了したことをラムダに通知されることはありませんので、あなたがこのメッセージを得ている要求

を完了する前に終了しました。いったん完了したらcontext.succeed()関数を呼び出すか、新しいcallback()メソッドを使用するにはupdate your codeメソッドを呼び出し、完了したら呼び出す必要があります。

関連する問題