【问题标题】:Express/Nodemailer - send info to browser after sending emailExpress/Nodemailer - 发送电子邮件后将信息发送到浏览器
【发布时间】:2022-01-17 18:47:06
【问题描述】:

我对表达方式很陌生,我想我正在努力解决一些不那么难的事情......

我有一个函数 sendEmail

exports.sendEmail = async (req, res) => {
  const transport = nodemailer.createTransport({
    host: process.env.MAIL_HOST,
    port: process.env.MAIL_PORT,
    secure: false,
    auth: {
      user: process.env.MAIL_USER,
      pass: process.env.MAIL_PASSWORD,
    },
    tls: {
      rejectUnauthorized: false,
    },
  });

  await transport.sendMail(
    { body },
    (err, info) => {
      console.log(err);
      console.log(info);
// here is a problem
          if (err) {
           res.status(200).json({ msg: 'error' });
           throw err;
           } else {
             res.status(200).json({ msg: 'mesage  
             has been sent' });
           }
          ); 

此功能工作正常 - 发送电子邮件。但我想要实现的是向浏览器发送信息,信息为“已发​​送”或“错误”。

在前端我有这个代码:

await axios.all([
      axios.post(`${process.env.REACT_APP_DOMAIN}/api/send-email`, {
        data,
      }),
     
      axios
        .get(`${process.env.REACT_APP_DOMAIN}/api/send-email`)
        .then((res) => {
          console.log(res);
        }),
    ]);

axios.post 工作正常,但 axios.get 不是。我得到的响应不包含我想要的数据。

谁能解释我在发送电子邮件后如何发送我需要的数据?

谢谢。

【问题讨论】:

  • 您可以像这样使用 try catch 块向您的客户端发送数据。当您发送发布请求时,您将收到信息或错误。尝试{ const info = await transport.sendMail({ body }); res.send(信息); }catch(error){ res.status(500).send(error.message) }
  • @MithatErcan 感谢您的回答。我已经尝试过了,但仍然没有。也许我在 axios 调用中做错了什么?我在互联网上搜索并找到了有关 res.locals 和中间件的信息,但在这种方法中我收到 undefind :/

标签: javascript express axios nodemailer


【解决方案1】:

如何使用基于承诺的方式

transport.sendMail(config)
.then(info => res.send(info))
.catch(e => res.send(e))

【讨论】:

  • 谢谢。我试过了,但没有成功
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2017-05-16
  • 2015-05-19
相关资源
最近更新 更多