2017-05-16 11 views
1

にAWSラムダにfs.writeFileで.txtファイルを作成し、読み方、こんにちは

誰かが私はAWSラムダに.TXTを書くことができる方法を知っていますか? Node.js、Alexa Skills Kit、Lambdaを使用しています。

マイコード:

var fs = require('fs'); 


const handlers = { 
    'SetOrderIntent': function() { 
     if (this.event.request.intent) { 
      var test = this.event.request.intent.slots.Items.value; 
      fs.writeFile('/tmp/log.txt', test, function (err) { 
       if (err) throw err; 
      }); 
      this.emit(':ask', 'This is your item: ' + test, "Test"); 
     } 
    }, 
    'RetrieveOrderIntent': function() { 
     if (this.event.request.intent) { 
      fs.readFile('/tmp/log.txt', function (err, content) { 
       if (err) return callback(err) 
       callback(null, content) 
      }) 
      this.emit(':ask', content); 
     } 
    }, 
} 

答えて

2

事はあなたの/tmpフォルダが唯一のあなたのラムダ関数の実行中に永続性が保証されていること、です。そう; SetOrderIntentが呼び出されて1回のラムダコールで実行され、別のラムダコールでRetrieveOrderIntentが実行された場合、これは2回の別々のラムダ実行であり、/tmpがまだ利用可能であるとは保証されません。

1回のラムダ実行で保存したデータがread関数が呼び出されたときに残っていることを確認するには、S3程度のデータを保存する必要があります。

+0

S3を使用したり、session.Attributesを使用することをお勧めしますか? – Mae

+0

私はそれがあなたのデータのサイズに依存すると思うが、私にとってはそれは唯一の文字列のように見える? session.Attributesを試す必要があります。 また、あなたは 'RetrieveOrderIntent'で同期を出しています。これは、readFileがコールバックで実際に終了する前に、あなたのemitが起動されたことを意味します。 readFileコールバックの中で 'this.emit'を動かすべきです。 'callback'はどこから来たのでしょうか? – driedel

+0

@Maeはうまくいった? – driedel