为什么在nodemailer中不能处理错误?

问题描述 投票:0回答:1

我试图用nodemailer设置一个非常简单的联系表格,它工作得很好,但我的问题是,它不处理错误。页面应该重定向,如果抛出一个错误,但相反,重定向不会发生,应用程序停止运行。我无法理解为什么会发生这种情况。这是我的代码。

if (req.method === 'POST') {
  const name = req.body.name;
  const email = req.body.email;
  const msg = req.body.message;

  const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: 'myemail', // left out here
      pass: process.env['GMAIL_PASS']
    }
  });

  const mailOptions = {
    from: 'myemail', // left out here
    to: 'myemail', // left out here
    subject: 'Portfolio Inquiry',
    text: `
          Name: ${name}
          Email: ${email}
          Message:${msg}`
  };

  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      // If an error is thrown, it should redirect back to the page with a fail message
      return res.redirect('/about?send=fail#contact');
    } else {
      return res.redirect('/about?send=success#contact');
    }
  });
}

如果我在脚本中引入了一个错误,注释了一些重要的东西,或者只是抛出了一个错误,就像我说的那样,错误处理块中的 sendMail 回调没有任何作用。正如我所说的,它确实能正常工作并发送邮件,但如果有什么地方出了问题,我肯定想让我的用户知道。谁能帮助我了解如何纠正这个问题?

javascript node.js express nodemailer
1个回答
0
投票

我终于自己想出了一个解决方案。下面是一个包装函数。

function sendEmail(req) {
    const name = req.body.name;
    const email = req.body.email;
    const msg = req.body.message;

    const transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 587,
        secure: false,
        service: 'gmail',
        auth: {
            user: //left out,
            pass: process.env['GMAIL_PASS']
        }
    });

    const mailOptions = {
        from: //left out
        to: //left out
        subject: 'Portfolio Inquiry',
        text: `
Name: ${name}
Email: ${email}
Message:

${msg}`};

    return transporter.sendMail(mailOptions);
}

然后是函数调用

try {
   await sendEmail(req);
   return res.redirect('/about?send=success#contact')
} catch (err) {
   return res.redirect('/about?send=fail#contact')
}

因为... sendMail 当没有给定回调时,函数会返回一个承诺,你可以在它的 try...catch 块。

© www.soinside.com 2019 - 2024. All rights reserved.