如何在节点中动态填充 html 数据以进行发布而不是显示?

How can I dynamically populate html data in node for posting, not displaying?

我目前正在尝试在文件流中填充 html 数据,以便我可以使用 smtpTransport 在电子邮件中发送它。我尝试过使用 ejs,但我看到的几乎每个示例都在使用 ejs.render 来显示内容,同时我试图进一步将其作为字符串发送。我想手动执行此操作而不是使用邮件黑猩猩之类的东西,但我还没有发现任何有用的东西。对于上下文,我试图在用户购买东西时创建一封收据电子邮件,并用这些物品填充 table 。这是我一直尝试与 ejs 一起使用但得到 "TypeError: this.templateText.replace is not a function error":

的代码
router.post('/placeorder', function(req, res) {
    var orderInfo = req.body;

    var delivery = orderInfo.deliveryDate.split("00:00:00")[0] + " from " + orderInfo.deliveryTime;

    //Email buyer receipt
    fs.readFile('buyer_receipt.html',function (err, data){
        if (err) {
            console.log(err);
        } else {
            var renderedHtml = ejs.render(data, {cart: orderInfo.cart, subtotal: orderInfo.subtotal, fee: orderInfo.fee, total: orderInfo.total, deliveryInfo: delivery});

            smtpTransport.sendMail({
                from: "Test <myemail@gmail.com>",
                to: orderInfo.user.user.ownerName + " <" + orderInfo.user.user.email +">",
                subject: "Thanks for your order!",
                html: renderedHtml
            }, function(error, response){
                if(error) {
                    console.log(error);
                } else {
                    console.log("Mail sent: " + response.message);
                }
            });
    }
});

我也愿意在 ejs 之外使用其他平台。

评论 ejs.render 我们 data.replace 替换变量购物车、小计、费用等

使用 EmailTemplates CrocodileJS 和 ejs 来解决这个问题。

错误 TypeError: this.templateText.replace is not a function error 发生是因为 fs.readFile returns 回调 data 中的原始缓冲区。如果你将编码作为第二个参数传递给 fs.readFile 那么回调 data 将是一个字符串并且 ejs 不会再抱怨了:

fs.readFile('buyer_receipt.html', 'utf-8', function (err, data) {
    // 'utf-8' encoding specified so now data is a string instead of a raw buffer
})