Я только что узнал, как отправлять электронную почту, используя форму через 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>