Асинхронная почта с "ожиданием axios" - PullRequest
0 голосов
/ 20 декабря 2018

в моем React-приложении я хочу после регистрации отправить электронное письмо с axios и nodemailer.Таким образом, когда нажимается кнопка «Регистрация», она использует api «/ api / form» для отправки данных на сервер.Моя проблема в том, что данные не будут отправлены на сервер при обычном использовании.Если я использую developertools с точками взлома для отладки этой функции, она работает!Так что это не может быть проблемой со стороны сервера, я думаю, что проблема находится на переднем крае, но я не понимаю, почему.Это то, как я вызываю axios.post?

Вот код для функции отправки (интерфейс):

async onSubmit(e) {
    e.preventDefault
    var token = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);

    const { firstName, email, authToken } = this.state;

    const form = await axios.post('/api/form', {
       firstName,
       email,
       authToken: token
    }, console.log("form"),this.props.history.push(`/login`));
    return form;
  }

Это код в index.js (сервер):

/*Double-Opt-In*/
app.use(express.static('public'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))

/*Double-Opt-In*/
app.post('/api/form', (req, res) => {
  console.log(req.body);
  nodemailer.createTestAccount((err, account) => {
    token= req.body.authToken;
    link="http://localhost:3000/verify"+"?token="+token;
    console.log("createTestAccount");
    const htmlEmail = `
      <h3>WebFit Registrierung</h3>
    `

    let transporter = nodemailer.createTransport({
      host: 'smtp.gmail.com',
      port: 465,
      secure: true,
      auth: {
        user: 'email',
        pass: 'password'
      }
    })

    let mailOptions = {
        from: 'WebFit', // sender address
        to: req.body.email, // list of receivers
        replyTo: 'app@webfit.app',
        subject: 'Welcome to Webfit <3', // Subject line
        text: req.body.message, // plain text body
        html: htmlEmail // html body
    };

    // send mail with defined transport object
    transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: %s', info.messageId);
        // Preview only available when sending through an Ethereal account
        console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

        // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
        // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
    });
  });
});

const PORT = process.env.PORT || 3001

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
})
/*End Double-Opt-In*/
...