我如何使用节点电子邮件模板作为初始化/行为风格的对象

How do I use node-email-templates as an initialize/act style object?

本文关键字:初始化 风格 对象 何使用 节点 电子邮件      更新时间:2023-09-26

(欢迎对术语的建议)

我试图从一个节点控制台应用程序设置一个简单的电子邮件发件人。阅读这个答案后,node-email-templates似乎是要走的路。但是我不知道如何让这个库在"现在初始化,以后使用"风格的对象中工作。示例代码没有那样做,它在初始化对象的同时发送。Node-mailer给出了一个我习惯的样式的好例子:

var nodemailer = require("nodemailer");
// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "gmail.user@gmail.com",
        pass: "userpass"
    }
});
// setup e-mail data with unicode symbols
var mailOptions = {
    from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address
    to: "bar@blurdybloop.com, baz@blurdybloop.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
}
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }
    // if you don't want to use this transport object anymore,
    // uncomment following line:
    // smtpTransport.close(); // shut down the connection pool, no more messages
});

我真正想做的是:

// require node-email-templates 
// setup smtp transport, store it as a property of another object,
//   let's call it Alert 
// when an alert needs to send an email it will pick a template 
//   name and tell node-email-templates to send that template, 
//   with appropriate local variables 

这在任何方面看起来都不寻常,但如果我能根据提供的示例代码让它工作,那就太糟糕了。

在查看源代码并发现节点电子邮件模板的主条目是一个事件驱动的过程之后,我怀疑您是否可以不付出大量努力就完成所需的工作。

如果这没有阻止你,你可以考虑从模块的main.js函数入口点提取诸如渲染器和传输的创建之类的东西,并重构它以包含更多代表你需要的预配置资源的参数。

另一种可能的方法是在主入口函数中添加对外部定义的事件处理程序的调用,以设置对外部资源的引用。

应该注意的是,这两个更改将限制您在不丢失修改的情况下更新现有模块的能力。

但是在编写库时,没有一种简单的方法可以在不修改源代码的情况下将基本上是事件驱动的过程转换为线性过程。