从某个需要此模块的文件夹中导入某些功能不起作用。
我正在使用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
而停止。
答案 0 :(得分:0)
从模块导出内容的正确语法是
exports.globalObjectName = localObjectName
因此,在您的第一个文件中,导出语句应如下所示
exports.mailTransporter = mailTransporter
答案 1 :(得分:0)
当您使用module.exports并要求时,我认为您不需要{}。尝试module.exports = sendEmail ;
和const sendEmail = require("../utils/mailTemplate");