如何在节点中动态填充 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
})
我目前正在尝试在文件流中填充 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
})