我有一个如下模块:
class mailer() {
constructor() {
this.template = "";
this.email = "";
}
setTemplate(tplName) {
this.template = tplName;
return this;
}
sendEmail(email) {
//some stuff
}
}
module.exports = mailer;
要消耗掉它,好吧,你要做:
const mailer = require('mymodule');
(new mailer()).setTemplate("foo").sendEmail('foo@bar.com');
我使用一个类的原因是因为几个进程可以同时使用该模块,所以我需要隔离变量。这可以按预期工作,但是我希望通过删除“新”部分来使代码更整洁。我可以导出该类的实例,而不是导出该类本身,但是Node将在第一个需求之后缓存,并且我的代码每次都将使用相同的实例。
答案 0 :(得分:4)
如果只是new
困扰着您,请导出工厂函数,而无需new
即可调用以创建新实例:
module.exports = function() { return new mailer() };
const createMailer = require('mymodule');
createMailer().setTemplate("foo").sendEmail('foo@bar.com');
否,您不应尝试导出实例,也不应尝试使用任何魔术来访问导出后刷新导出的内容。
答案 1 :(得分:0)
在Mailer文件中使用吸气剂创建工厂,然后导出工厂:
const mailerFactory = {
get mailer() {
return new Mailer();
}
};
module.exports = mailerFactory;
现在,您可以通过以下方式创建新实例:
const mailer = require("./Mailer").mailer;
mailer.setTemplate("foo").sendEmail('foo@bar.com');
工作example-查看控制台。