我是否为我的React和Node App正确配置了端点?

时间:2019-05-21 04:45:59

标签: node.js reactjs express nodemailer

我正在尝试配置节点/表达式并使用nodemailer响应应用程序,但似乎无法收到电子邮件。所有数据都完美地发送到了节点后端,但是我似乎无法通过nodemailer发送电子邮件。控制台上没有错误消息,并且控制台日志中的smpt.transporter函数未提供任何反馈。我想知道是否有人可以在这里帮助我?非常感谢!

App.js

import React, { Component } from "react";
import PageOne from "./components/PageOne";
import PageTwo from "./components/PageTwo";
import PageThree from "./components/PageThree";
import PageFour from "./components/PageFour";
import PageFive from "./components/PageFive";
import PageSix from "./components/PageSix";
import { Button } from "semantic-ui-react";
import "semantic-ui-css/semantic.min.css";

import axios from "axios";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      generalDetails: "Text",
      fName: "Text",
      mName: "Text",
      LName: "Text",
      gender: "Text",
    };

    this.onContentChange = this.onContentChange.bind(this);
    this.onSubmitForm = this.onSubmitForm.bind(this);
  }

  render() {
    return (
      <div className="App">
        <PageOne handleChange={this.onContentChange} />
        <PageTwo handleChange={this.onContentChange} />
        <PageThree handleChange={this.onContentChange} />
        <PageFour handleChange={this.onContentChange} />
        <PageFive handleChange={this.onContentChange} />
        <PageSix handleChange={this.onContentChange} />

        <Button onClick={this.onSubmitForm}>Submit Form</Button>

        <br />
        <br />
      </div>
    );
  }

  onSubmitForm = e => {
    e.preventDefault();
    var data = {
      generalDetails: this.state.generalDetails,
      fName: this.state.fName,
      mName: this.state.mName,
      lName: this.state.lName,

    };


    axios
  .post("http://localhost:5000/home", data)
  .then(result => {
    console.log(result)
  })
  .catch(() => {
    console.log("Something went wrong. Please try again later");
  });


  };

  //end

  onContentChange(fieldname, data) {
    console.log("On Content Change", data);

    this.setState({
      [fieldname]: data
    });
  }
}

export default App;

Server.js

const nodemailer = require('nodemailer')
const path = require('path')
const express = require('express')
const app = express()
const port = 5000
const cors = require('cors')
app.use(cors())
const bodyParser = require('body-parser')
app.use(bodyParser.json())
// to support JSON-encoded bodies

app.use(
  bodyParser.urlencoded({

    // to support URL-encoded bodies
    extended: true
  })
)



app.get('/home', (req, res) => {
  console.log(
    'Hello from .get /home',
    req.body.generalDetails,
    req.body.firstName,
    req.body.mName
  )
})


const http = require('http');



app.post('/home', (req, res) => {

  var server = http.createServer(app)
  server.listen(3000, function () {
    console.log('Express is running on port 3000')
  })


  app.post('/home', function (req, res) {
      var data=req.body;

      var smtpTransport = nodemailer.createTransport("SMTP",{
         service: "Gmail",
         auth: {
         user: "email",
         pass: "pass"
         }});

     smtpTransport.sendMail({  //email options
     from: "email",
     to: "email", // receiver
     subject: "Emailing with nodemailer", // subject
     text:req.body.generalDetails,
     html: "here your data goes"// body (var data which we've declared)
      }, function(error, response){  //callback
           if(error){
             console.log(error);
          }else{
             console.log("Message sent: " + res.message);
         }

     smtpTransport.close();
      }); });

  let data = [{
    //page one data
    generalDetails: req.body.generalDetails,
    fName: req.body.fName,
    mName: req.body.mName,
    lName: req.body.lName,
    email: req.body.email,


   }];

   res.json(data);

 }

);

app.listen(port, () => `Server running on port ${port}`);

1 个答案:

答案 0 :(得分:0)

自从您使用Gmail以来,请确保将访问安全性较低的应用程序设置为启用 转到:https://www.google.com/settings/security/lesssecureapps进行操作。在您的代码中,似乎有两个名称/ home相同的路由(两个发布端点)。您为什么两次收听服务器?试试这个代码。

    const nodemailer = require('nodemailer')
    const path = require('path')
    const express = require('express')
    const app = express()
    const http = require('http');
    const server = http.createServer(app)
    const port = 5000
    const cors = require('cors')
    app.use(cors())
    const bodyParser = require('body-parser')
    app.use(bodyParser.json())
    // to support JSON-encoded bodies

    app.use(
      bodyParser.urlencoded({

        // to support URL-encoded bodies
        extended: true
      })
    )



    app.get('/home', (req, res) => {
      console.log(
        'Hello from .get /home',
        req.body.generalDetails,
        req.body.firstName,
        req.body.mName
      )
    })


   app.post('/home', function (req, res) {
          var data=req.body;

          var smtpTransport = nodemailer.createTransport("SMTP",{
             service: "Gmail",
             auth: {
             user: "email",
             pass: "pass"
             }});

         smtpTransport.sendMail({  //email options
         from: "email",
         to: "email", // receiver
         subject: "Emailing with nodemailer", // subject
         text:req.body.generalDetails,
         html: "here your data goes"// body (var data which we've declared)
          }, function(error, response){  //callback
               if(error){
                 console.log(error);
              }else{
                 console.log("Message sent: " + res.message);
             }

         smtpTransport.close();
          }); });

      let data = [{
        //page one data
        generalDetails: req.body.generalDetails,
        fName: req.body.fName,
        mName: req.body.mName,
        lName: req.body.lName,
        email: req.body.email,


       }];

       res.json(data);

     }

    );

    app.listen(port, () => `Server running on port ${port}`);