我用fs.readFileSync輕鬆實現了這一點,但我想異步執行此操作。我的代碼如下。在異步fs.readFile的回調中使用EJS呈現HTML模板?
function send(err, str){
if(err){
console.log(err);
}
var template = ejs.render(str, 'utf8', {name: data.name});
transporter.sendMail({
from: myEmail,
to: anotherEmail,
subject: mySubject,
html: template,
attachments: images
}, function(err, response) {
if(err){
console.log(err);
}
});
}
fs.readFile('emailTemplate.ejs', send);
所以我做了我自己的fs.readFile回調,這樣當該文件已被讀取它將使電子郵件,把適當的名稱,然後用nodemailer把它關閉。但是,它不喜歡這樣。如果沒有問題,它會通過錯誤獲取,但在渲染模板時呈現以下錯誤。
TypeError: Object (Followed by the entire HTML of the template) has no method 'indexOf' at Object.exports.parse (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:144:21) at exports.compile (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:229:15) at Object.exports.render (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:289:10) at send (/home/ubuntu/workspace/routes/email.js:171:28) at fs.readFile (fs.js:272:14) at Object.oncomplete (fs.js:108:15)
雖然這樣做同步工作正常。
var str = fs.readFileSync('emailTemplate.ejs', 'utf8');
var template = ejs.render(str, {
name: data.name
});
任何人都可以告訴我爲什麼會發生這種情況嗎?
我剛剛嘗試了編碼,'utf8'和{encoding:「utf8」}仍然出現錯誤。 –
我意識到我有錯誤的順序渲染的選項。 'ejs.render('emailTemplate.ejs',{{data.name}},'utf8');''''''''''''''''''''''謝謝你的幫助! –