javascript - 召唤依赖注入(inject)并调用模块内的方法/函数

标签 javascript node.js module nodemailer

预先感谢您的帮助。

我不确定如何执行以下操作。我有一个发送电子邮件的模块,并且使用 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/

相关文章:

javascript - 将 DIV 和 SVG 图层展平为单个图像

javascript - express 服务器没有响应

node.js - Express 3 上的 EJS 布局

module - 如何编写 use 语句以导入名称但将其用作 mod1::mod2::item?

javascript - 使用 Node.JS 进行实时图形处理

javascript - 如何删除 :checked pseudo-class using a controlled component in React?

javascript - 使用 npm 终端的 npm 脚本奇怪行为

typescript - 为什么 Typescript 使用关键字 "export"来公开类和接口(interface)?

node.js - Node.js 中的模块初始化并在请求之间保留其状态

javascript - 迭代复杂对象,删除不需要的元素(多个嵌套对象)