gpt4 book ai didi

javascript - 在异步 fs.readFile 的回调中使用 EJS 呈现 HTML 模板?

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:07 25 4
gpt4 key购买 nike

我可以使用 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 发送它。然而,它不喜欢这样。如果没有问题,它会得到错误,但在尝试呈现模板时渲染会抛出以下错误。

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
});

谁能告诉我为什么会发生这种情况?

最佳答案

documentation fs.readFilefs.readFileSync 表示

If no encoding is specified, then the raw buffer is returned.

因为您使用同步版本提供编码,而不使用异步版本,所以它们的行为不同。

如果您尝试这样做:

fs.readFile('emailTemplate.ejs', {encoding: "utf8"}, send);

它应该可以工作。

关于javascript - 在异步 fs.readFile 的回调中使用 EJS 呈现 HTML 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37289983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com