[英]How to fix 502 error getting on post request?
I have node.js app that upon click of a button send post request and on post request email should be sent to the admin. 我有node.js应用程序,单击按钮即可发送发帖请求,并在发帖请求后将电子邮件发送给管理员。 The page link from where I initiate request can be found here: https://blockmmerce.io/views/contact . 可以在此处找到发起请求的页面链接: https : //blockmmerce.io/views/contact 。
As soon as I click the button the event listener is called but it tries to send the request and returns back with 502 error code. 一旦单击按钮,事件侦听器就会被调用,但它会尝试发送请求并返回502错误代码。
any possible fix? 任何可能的解决办法?
contact.js: contact.js:
$(document).ready(function () {
console.log("here...")
var enquirybutton = document.querySelector('#sendEnquiry');
enquirybutton.addEventListener('click', function (event) {
alert("clicked!!");
let name = $('#name').val();
let email = $('#email').val();
let message = $('#message').val();
event.preventDefault();
$.ajax({
url: "/sendEnquiry",
dataType: "json",
type: "post",
cache: false,
data: ({
"name": name,
"email": email,
"message": message
}),
success: function (response) {
alert("Enquiry sent successfully !!!")
},
error: function (textStatus, errorThrown) {
console.log("Error::::" + errorThrown);
console.log("status::::" + String(textStatus));
}
});
});
});
Index.js: Index.js:
var express = require('express');
var router = express.Router();
var emailConfig = require('../config/email.config.js');
router.post('/sendEnquiry', function (req, res, next){
let name = req.body.name;
let email = req.body.email;
let message = req.body.message;
emailConfig.sendEmail(
'admin@blockmmerce.io',
'Enquiry',
`this is first query`
);
res.json({});
console.log("hello from send enquiry");
});
modules.exports = export;
email.config.js: email.config.js:
var nodemailer = require('nodemailer');
//--------------------------------------------------------
// Declarations
//--------------------------------------------------------
var senderEmail = 'info@server119.web-hosting.com';
// var password = '----';
//--------------------------------
// Mail Sending Email
//--------------------------------------------------------
var transporter = nodemailer.createTransport({
host: 'server119-3.web-hosting.com',
secure: true,
port: 465,
auth: {
user: 'info@blockmmerce.io',
pass: '------'
}
});
// ================================================================
// handle Sendmail
// ================================================================
var sendEMail = (emailId, subject, mailcontent) => {
let mailOptions = {
from: senderEmail,
to: emailId,
subject: subject,
html: mailcontent
};
return new Promise(function (resolve, reject) {
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
reject(err);
} else {
resolve(info);
}
});
});
}
//--------------------------------------------------------
// Exporting All functions
//--------------------------------------------------------
module.exports = {
transporter,
senderEmail,
sendEMail
}
You have to add content type and submit data as string 您必须添加内容类型并以字符串形式提交数据
$.ajax({
contentType: 'application/json',
data: JSON.stringify({
name:"Bob",
...
})
});
Also you have to return response to user from the server side, also don't use await and return response immediately to user, no need to wait till the mail to be submitted, because it will take time. 另外,您必须从服务器端向用户返回响应,也不要使用await并立即将响应返回给用户,无需等待邮件提交,因为这会花费时间。
router.post('/sendEnquiry', function (req, res, next){
let name = req.body.name;
let email = req.body.email;
let message = req.body.message;
emailConfig.sendEmail(
'admin@blockmmerce.io',
'Enquiry',
// `Hi, I have an enquiry that: ${message}. You can reply back on my this email ${email}. Thanks, ${name}`
`${message}`
);
res.json({});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.