从节点js

时间:2019-02-08 13:44:18

标签: javascript node.js express

从某个需要此模块的文件夹中导入某些功能不起作用。

我正在使用nodemailer发送电子邮件。我有3个带有模块的文件夹。问题在于从另一模块导入(要求)电子邮件发送功能到当前模块。它变为undefined,错误为myFunc is not a function。 我正在做一些非常简单的事情,例如从文件夹index.js中请求功能,其中包括所需的功能。但是当我尝试使用它时,它变得不确定。

services / mailTransport.js

const nodemailer = require('nodemailer');

const mailTransporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
     secure: false, 
    auth: {
      user: 'test@test.com',
      pass: 'myPassword'
    }
});

module.exports = mailTransporter;

services / index.js

const mailTransporter = require("./mailTransporter");
module.exports = { mailTransporter }

utils / mailTemplate.js

const { mailTransporter } = require("../services");

const sendEmail = function (obj, msg) {
return new Promise( (res, rej) => {
    let mailOptions = {
        from: 'test@test.com',
        to: `${obj.to}`,
        subject: `${obj.subject}`,
        text: "plain text",
        html: "<b>" + msg + "</b>"
    };
    mailTransporter.sendMail(mailOptions, (error, info) => {
        mailTransporter.close();
        if (error) {
            rej(error);
        }
    console.log('Message sent: %s', info.messageId);
    res(info.messageId);
    });
})
}

module.exports = { sendEmail };

最后我想在project / emails.js中使用它

const { sendEmail } = require("../utils/mailTemplate");
const { vendorNotificationMessage } = require("../utils/emailMessages");

async function notifyVendors(steps) {
try {
    for(let step of steps) {
        if(step.vendor) {
            const message = vendorNotificationMessage(step);
            step.to = step.vendor.email;
            step.subject = "Step cancelling notification!";
            await sendEmail(step, message);
        }
    }
} catch(err) {
    console.log(err);
    console.log("Error in notifyVendors");
}
}

module.exports = { notifyVendors };

我希望使用该sendEmail函数发送电子邮件。但这会因错误TypeError: sendEmail is not a function而停止。

2 个答案:

答案 0 :(得分:0)

从模块导出内容的正确语法是

exports.globalObjectName = localObjectName

因此,在您的第一个文件中,导出语句应如下所示

exports.mailTransporter = mailTransporter

答案 1 :(得分:0)

当您使用module.exports并要求时,我认为您不需要{}。尝试module.exports = sendEmail ;const sendEmail = require("../utils/mailTemplate");