我用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
});
任何人都可以告诉我为什么会发生这种情况吗?