Валидация формы nodemailer на стороне сервера - PullRequest
0 голосов
/ 21 октября 2019

Я только что узнал, как отправлять электронную почту, используя форму через Ajax / nodemailer, но теперь мне нужно знать, каков наилучший подход для добавления проверки UX на стороне сервера и на стороне клиента.

Мне удалось довольно легко добавить проверку на стороне клиента с помощью начальной загрузки, но я до сих пор не понимаю, как добавить к ней сторону сервера. Будет ли php лучшим решением? Я знаю, что это можно сделать с помощью express.js, но я подумал, что это было очень сложно для первого проекта.

Я ценю любую помощь.

Вот код JS для моей формы:

const express = require ("express")
const path = require ("path")
const nodemailer = require ("nodemailer")

const app = express ();

app.use(express.json())
app.use(express.urlencoded({extended:false}));

app.use(express.static(path.join(__dirname, "public")));

app.post ("/ajax/email", function(request, response){
   const transporter = nodemailer.createTransport({
      host: "biz260.inmotionhosting.com",
      port: "465",
      secure: true,
      auth: {
         user: "test@learningtodom.com", 
         pass: "ingrid1pqp"
      }
   })

   var textBody = `FROM: ${request.body.name}`
   var htmlBody = `<h2>Contact form</h2>from: ${request.body.name}`
   var mail = {
      from: "test@learningtodom.com",
      to: "pablo.football.coach@gmail.com",
      subject: "Mail",
      text: textBody,
      html: htmlBody
   }

   transporter.sendMail(mail, function (err, info){
      if(err) {
          console.log(err);
          response.json({message: "an error occured: "})
      }
      else {
         response.json({ message: "message sent"})
      }
   });
});

app.listen (8000, () => console.log ("listening")); 

Вот несколько первых строк кода для формы:

<script>
      function submitEmailForm(form) {
          var obj = new XMLHttpRequest();
          obj.onreadystatechange = function () {
              if (obj.readyState == 4) {
                  if (obj.status = 200) {
                      var x = JSON.parse(obj.responseText);
                      alert (x.message)
                  }
                  else {
                      alert("XMLHttp Status: " + obj.status + ", " + obj.statusText)
                  }
              }
          };
          obj.open ("post", form.action, true);
          obj.setRequestHeader("Content-type", "application/json");
          obj.send(JSON.stringify({name:form.name.value, email: form.email.value, message: form.message.value}));
          return false; 
      }
   </script>



  </head>
  <body>
    <h1>Hello, world!</h1>
<div class="contact">

<form method="POST" action="/ajax/email" onsubmit="return submitEmailForm(this);">
  <div class="form-row">
    <div class="col-md-4 mb-3">
      <label for="validationServer01">First name</label>
      <input type="text" class="form-control is-valid" id="validationServer01" placeholder="First name" value="Mark" name="name" required>
      <div class="valid-feedback" >
        Looks good!
      </div>
    </div>
...