首页 > 解决方案 > 如何使 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);
    }
});

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

由于我是新来的NodeJS,我想知道我是否可以删除这种代码冗余,使之类的东西成为一个utility或一个helper类。目标是导入wrapper类并调用一个简单的函数来发送电子邮件。

处理这个问题的最佳方法是什么?

标签: node.jsexpressnodemailer

解决方案


我将您的代码重构为如下所示,然后将其保存为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;

在你的其他模块中,比如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'
};);

推荐阅读