预先感谢您的帮助。
我不确定如何执行以下操作。我有一个发送电子邮件的模块,并且使用 Summon.js 依赖注入(inject)将 Config 注入(inject)到模块中,但我需要使用 sendMail 方法并向其传递参数 mailOptions。下面是代码示例:
'use strict';
const nodemailer = require('nodemailer');
const ejs = require('ejs');
const fs = require('fs');
module.exports = function(Configs) {
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: Configs.email.host,
port: Configs.email.port,
auth: {
user: Configs.email.user,
pass: Configs.email.pass
}
});
this.sendMail = function(mailOptions) {
mailOptions.to = Configs.mockEmail || mailOptions.to
mailOptions.from = Configs.email.user
return new Promise((resolve, reject) => {
if (mailOptions.template) {
ejs.renderFile('/../templates/' + mailOptions.template +
'.ejs', mailOptions.data, null, (err, html) => {
if (err) {
return reject(err)
}
resolve(html)
})
return
}
resolve()
}).then(html => {
mailOptions.html = html || mailOptions.html
return new Promise((resolve, reject) => {
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return reject(error)
}
resolve(info)
})
})
})
}
return this
}
然后,我想使用这个模块:
const EmailUtil = require('email')
async function foo() {
// Do something async with await.
const mailOptions = {...}
EmailUtils.sendMail(mailOption);
}
但是,它给了我错误:
类型错误:EmailUtils.sendMail 不是函数
注意:我可以删除 module.export = function(Configs) 但它们不会很好,因为我需要对配置文件的路径进行硬编码,并且每个环境都有多个配置文件。然后,我希望能够在从另一个模块调用 sendMail 时保留 Summon.js 依赖注入(inject)。谢谢
有什么想法吗? 谢谢!
最佳答案
由于您要导出一个函数,因此您需要在需要模块后实际调用它:
const EmailUtil = require('email')
async function foo() {
// Do something async with await.
const mailOptions = {...}
EmailUtil().sendMail(mailOption);
}
关于javascript - 召唤依赖注入(inject)并调用模块内的方法/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811134/