如何使 nodemailer 可在多个模块中重用?

sfa*_*oso 2 node.js express nodemailer

我是nodemailer在用户注册后实现的,方法如下:

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: process.env.EMAIL_USERNAME,
        pass: process.env.EMAIL_PASSWORD
    }
});

let mailOptions = {
    from: process.env.EMAIL_USERNAME,
    to: user.email,
    subject: 'Verify your account',
    text: 'Click here for verify your account'
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
});
Run Code Online (Sandbox Code Playgroud)

我不太喜欢这段代码,因为如果我需要在另一个中发送电子邮件module,我需要重写上面的所有内容。

由于我是新来的NodeJS,我想知道如果我能删除此代码冗余制造类似一个utility或可能的helper类。目标是导入wrapper类并调用一个简单的函数来发送电子邮件。

哪个是最好的处理方法?

小智 5

我将您的代码重构为如下所示,然后将其另存为mail.js

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: process.env.EMAIL_USERNAME,
        pass: process.env.EMAIL_PASSWORD
    }
});

let sendMail = (mailOptions)=>{
  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
  });
};

module.exports = sendMail;
Run Code Online (Sandbox Code Playgroud)

在你的其他模块中,比如activation.js

var mailer = require('./mail.js');

mailer({
    from: process.env.EMAIL_USERNAME,
    to: user.email,
    subject: 'Verify your account',
    text: 'Click here for verify your account'
};);
Run Code Online (Sandbox Code Playgroud)