使用 jQuery Ajax 和 node.js and express 来验证发送电子邮件
Using jQuery Ajax with node.js and express to validate sending an email
所以,我在我正在制作的网站上有这个联系表格,我正在使用我在网上找到的模板,该模板使用 ajax 来验证表格是否有效并且电子邮件已发送,问题是这个验证表单的文件设置为与 PHP 一起工作,我想,所以我尝试修改具有 ajax 的文件以使其与我的节点应用程序一起工作,但我最终得到了表单永远加载,我无法加载资源:net::ERR_EMPTY_RESPONSE 在控制台中。
注意:表格正在运行,所有内容和电子邮件都已发送,但我只需要向用户表明它有效。
代码如下:
validate.js:
$.ajax({
method: "POST",
url: "/home",
data: str,
success: function(msg) {
if (msg == 'OK') {
this_form.find('.loading').slideUp();
this_form.find('.sent-message').slideDown();
this_form.find("input:not(input[type=submit]), textarea").val('');
} else {
this_form.find('.loading').slideUp();
this_form.find('.error-message').slideDown().html(msg);
}
}
})
index.js:
const express = require("express"),
router = express.Router(),
nodemailer = require("nodemailer"),
mailGun = require("nodemailer-mailgun-transport");
router.get("/home", (req, res) => {
res.render("index");
});
router.post("/home", (req, res) => {
let { firstName, lastName, email, website, company, message } = req.body;
console.log("Data: ", req.body);
let mailOptions = {
from: email,
to: "myemail@email.com",
subject: "No Subject",
html: "<h3>First Name: " + firstName + "</h3>" +
"<h3>Last Name: " + lastName + "</h3>" +
"<h3>Email: " + email + "</h3>" +
"<h3>Company: " + company + "</h3>" +
"<h3>Website: " + website + "</h3>" +
"<h3>Message: " + message + "</h3>"
}
smtpTransport.sendMail(mailOptions, (error, response) => {
if (error) {
console.log(error)
} else {
console.log("Successfully sent email.")
}
})
});
错误提示:错误为空响应。
那你为什么不直接发送回复呢?
router.post("/home", (req, res) => {
let { firstName, lastName, email, website, company, message } = req.body;
console.log("Data: ", req.body);
let mailOptions = {
from: email,
to: "myemail@email.com",
subject: "No Subject",
html: "<h3>First Name: " + firstName + "</h3>" +
"<h3>Last Name: " + lastName + "</h3>" +
"<h3>Email: " + email + "</h3>" +
"<h3>Company: " + company + "</h3>" +
"<h3>Website: " + website + "</h3>" +
"<h3>Message: " + message + "</h3>"
}
smtpTransport.sendMail(mailOptions, (error, response) => {
if (error) {
console.log(error);
res.status(500).send('false'); // <----- HERE
} else {
console.log("Successfully sent email.");
res.send("OK"); // <------------- HERE
}
})
});
所以,我在我正在制作的网站上有这个联系表格,我正在使用我在网上找到的模板,该模板使用 ajax 来验证表格是否有效并且电子邮件已发送,问题是这个验证表单的文件设置为与 PHP 一起工作,我想,所以我尝试修改具有 ajax 的文件以使其与我的节点应用程序一起工作,但我最终得到了表单永远加载,我无法加载资源:net::ERR_EMPTY_RESPONSE 在控制台中。
注意:表格正在运行,所有内容和电子邮件都已发送,但我只需要向用户表明它有效。
代码如下:
validate.js:
$.ajax({
method: "POST",
url: "/home",
data: str,
success: function(msg) {
if (msg == 'OK') {
this_form.find('.loading').slideUp();
this_form.find('.sent-message').slideDown();
this_form.find("input:not(input[type=submit]), textarea").val('');
} else {
this_form.find('.loading').slideUp();
this_form.find('.error-message').slideDown().html(msg);
}
}
})
index.js:
const express = require("express"),
router = express.Router(),
nodemailer = require("nodemailer"),
mailGun = require("nodemailer-mailgun-transport");
router.get("/home", (req, res) => {
res.render("index");
});
router.post("/home", (req, res) => {
let { firstName, lastName, email, website, company, message } = req.body;
console.log("Data: ", req.body);
let mailOptions = {
from: email,
to: "myemail@email.com",
subject: "No Subject",
html: "<h3>First Name: " + firstName + "</h3>" +
"<h3>Last Name: " + lastName + "</h3>" +
"<h3>Email: " + email + "</h3>" +
"<h3>Company: " + company + "</h3>" +
"<h3>Website: " + website + "</h3>" +
"<h3>Message: " + message + "</h3>"
}
smtpTransport.sendMail(mailOptions, (error, response) => {
if (error) {
console.log(error)
} else {
console.log("Successfully sent email.")
}
})
});
错误提示:错误为空响应。
那你为什么不直接发送回复呢?
router.post("/home", (req, res) => {
let { firstName, lastName, email, website, company, message } = req.body;
console.log("Data: ", req.body);
let mailOptions = {
from: email,
to: "myemail@email.com",
subject: "No Subject",
html: "<h3>First Name: " + firstName + "</h3>" +
"<h3>Last Name: " + lastName + "</h3>" +
"<h3>Email: " + email + "</h3>" +
"<h3>Company: " + company + "</h3>" +
"<h3>Website: " + website + "</h3>" +
"<h3>Message: " + message + "</h3>"
}
smtpTransport.sendMail(mailOptions, (error, response) => {
if (error) {
console.log(error);
res.status(500).send('false'); // <----- HERE
} else {
console.log("Successfully sent email.");
res.send("OK"); // <------------- HERE
}
})
});