2017-03-13 12 views
0

私はnode.jsでシンプルなWebアプリケーションを作成し、herokuでホストしました。主なプロセスは多くの操作を行いますが、そのうちの1つはIDでテキストファイルを読み書きしています。しかし、このファイルを別のプロセスからnodemailerで電子メールに送信しようとすると、空白として送信されます。ファイルは最初は空白ですが、メインプロセスによって書き込まれます。メインプロセスがそれからテキストを読み込んでいるので、そこに問題がないことがわかります。なぜそれが動作していないのか教えていただけますか?Nodemailer - 空白でないファイルが空白として送信される

編集:私は(私は、ファイルの内容をCONSOLE.LOGん)私は、ファイルを送信する際に空でないことを確かに知っ

メインプロセスコード:

function handleSubscriptions(event){ 
var senderID = event.sender.id; 
var recipientID = event.recipient.id; 
var timeOfPostback = event.timestamp; 
var payload = event.postback.payload; 

console.log("Received postback for user %d and page %d with payload '%s' " + 
    "at %d", senderID, recipientID, payload, timeOfPostback); 

if(payload == "iscrizione"){ 
    fs.appendFile("./users.txt", senderID + ",", function (err) { 
     if (err) throw err; 
     console.log('The id was appended to file!'); 
    }); 

    var data = fs.readFile('./users.txt', function(err, data) { 
     if (err) throw err; 
     processData(String(data)); 
    }); 

    function processData(data){ 
     var arr = data.split(","); 
     for(i = 0; i < arr.length - 1; i++){ 
      var val = parseInt(arr[i]); 
      msg = "user number " + i + " :"+ val ; 
      console.log(msg) 
     } 
    } 

    sendMessage(senderID, "Complimenti, sei iscritto!"); 
} 
    } 

送信者コード:

fs.readFile("./users.txt", function (err, data) { 

var message = { 
    sender: email, 
    to: email, 
    subject: 'File user', 
    body: 'File in allegato', 
    attachments: [{'filename': 'users.txt', 'content': data}] 
}; 

transporter.sendMail(message, function(error, info){ 
    if (error) { 
     console.log('Error occurred'); 
     console.log(error.message); 
     return; 
    } 
    console.log('Message 2 sent successfully!'); 
    transporter.close(); 
}); 
    }); 

答えて

0

これは並行性の問題のように聞こえます。ファイルを書き込む前に読み込んでいる可能性があります。

書き込む前に値を読み取っていないことを確認する必要があります。 1行のコードを見ることなく、それ以上の具体的なアドバイスはできません。

+0

私はコードで質問を更新しました。私が書いたように、私はconsole.logでコンテンツを出力するのでファイルが空ではないことを知っています –

関連する問題