【发布时间】:2016-09-14 08:55:21
【问题描述】:
我使用 fs.readFileSync 轻松完成了此操作,但我想异步执行此操作。我的代码如下。
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 将其发送出去。但是,它不喜欢这样。如果没有问题,它会得到错误,但 render 在尝试渲染模板时会抛出以下错误。
TypeError: 对象(后跟模板的整个 HTML)没有方法 'indexOf' 在 Object.exports.parse (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:144:21) 在exports.compile (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:229:15) 在 Object.exports.render (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:289:10) 在发送时(/home/ubuntu/workspace/routes/email.js:171:28) 在 fs.readFile (fs.js:272:14) 在 Object.oncomplete (fs.js:108:15)
不过,同步执行也可以。
var str = fs.readFileSync('emailTemplate.ejs', 'utf8');
var template = ejs.render(str, {
name: data.name
});
谁能告诉我为什么会发生这种情况?
【问题讨论】:
标签: javascript node.js asynchronous ejs nodemailer