带有“ await axios”的异步发布

时间:2018-12-20 16:05:57

标签: reactjs async-await axios nodemailer

在我的React-App中,我想在注册后向用户发送一封带有axios和nodemailer的电子邮件。因此,当按下“注册”按钮时,它将使用api“ / api / form”将数据发送到服务器。 我的问题是,在正常使用中,数据不会发送到服务器。如果我使用带有breackpoints的developertools来调试此功能,它将起作用!因此,对于服务器端而言这不是问题,我认为问题出在前端,但我不明白为什么。 是我叫axios.post的方式吗?

这是Submit函数(前端)的代码:

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*/

0 个答案:

没有答案