私は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);
ファイルが読み込まれたとき、それはで適切な名前を入れて、電子メールをレンダリングし、その後nodemailerでそれをオフに送信されますようだから私はfs.readFileのための私自身のコールバックを作りました。しかし、それはこれを好まない。それは、テンプレートをレンダリングしようとすると、レンダリングに問題はなくレンダリングで次のエラーがスローされると、エラーが発生します。
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');'実際には、あなたが提案したようにエンコーディングを組み込んでいます。ご協力いただきありがとうございます! –