我使用node.js创建了一个简单的Web应用程序,并使用heroku托管它。主进程执行许多操作,其中一个操作是使用id读取和写入文本文件。但是,当我尝试将此文件从其他进程发送到带有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 :(得分:0)
这听起来像是并发问题 - 您可能在写入文件之前读取该文件。
您需要确保在写入之前没有读取值。没有看到一行代码,就不可能给你任何更具体的建议。