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

时间:2016-12-29 19:34:00

标签: html node.js express ejs nodemailer

我目前正在尝试在文件流中填充html数据,以便我可以使用smtpTransport通过电子邮件发送它。我尝试过使用ejs,但几乎我见过的每个例子都是使用ejs.render显示内容,而我却试图将其作为字符串进一步发送。我想手动做这个,而不是使用像邮件黑猩猩这样的东西,但我还没找到任何有用的东西。对于上下文,我试图在用户购买东西并使用项目填充表格时创建收据电子邮件。这是我尝试与ejs一起使用的代码,但得到了一个" TypeError:this.templateText.replace不是函数错误":

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之外使用不同的平台。

3 个答案:

答案 0 :(得分:0)

评论ejs.render使用data.replace替换各种购物车,小计,费用等。

答案 1 :(得分:0)

使用EmailTemplates将CrocodileJS与ejs解决此问题。

答案 2 :(得分:0)

发生错误TypeError: this.templateText.replace is not a function error是因为fs.readFile在回调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
})