Импорт функции из другого модуля в узел js - PullRequest
0 голосов
/ 08 февраля 2019

Импорт определенной функции из некоторой папки, в которой был необходим модуль с этой функцией, не работает.

Я использую 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 };

И, наконец, я хочу использовать его здесь в projects / 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 голосов
/ 08 февраля 2019

Я не думаю, что вам нужно {}, когда вы используете module.exports и require.Попробуйте module.exports = sendEmail ; и const sendEmail = require("../utils/mailTemplate");

0 голосов
/ 08 февраля 2019

Правильный синтаксис для экспорта чего-либо из модуля:

exports.globalObjectName = localObjectName

Так что в вашем первом файле оператор экспорта должен выглядеть следующим образом

exports.mailTransporter = mailTransporter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...