2017-03-13 9 views
0

node.js로 간단한 웹 응용 프로그램을 만들고 heroku로 호스팅했습니다. 주 프로세스는 많은 작업을 수행하며 그 중 하나는 ID를 사용하여 텍스트 파일을 읽고 쓰는 작업입니다. 그러나이 파일을 다른 프로세스에서 nodemailer를 사용하여 전자 메일로 보내려고하면 공백으로 전송됩니다. 파일은 처음에는 공백이지만 메인 프로세스가 작성합니다. 주 프로세스가 텍스트를 읽었으므로 문제가 없다는 것을 알고 있습니다. 왜 작동하지 않는지 말해 줄 수 있어요?Nodemailer - 비어있는 파일이 공백으로 전송되지 않았습니다.

편집 :

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

보낸 코드 : 저는 파일이 비어 있지 보낼 때

메인 프로세스 코드 (i는 파일의 내용 CONSOLE.LOG 않음) 것을 확실히 알고 :

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

동시성에 문제가있는 것 같습니다. 파일을 작성하기 전에 파일을 읽은 것 같습니다.

작성하기 전에 값을 읽지 않도록해야합니다. 한 줄의 코드를 보지 않고는 그 이상의 구체적인 조언을 줄 수는 없습니다.

+0

코드로 질문을 업데이트했습니다. 필자가 작성한 것처럼, console.log로 출력하기 때문에 파일이 비어 있지 않다는 것을 안다. –