我编写了一种方法,可以像这样在node.js中向我的客户端发送邮件:-
app.post('/sendemail',(req, res) => {
const output = `
<p>You have a new contact request</p>
<h3>Contact Details</h3>
<ul> ;
<li>Name: ${req.body.name}</li>
<li>Email: ${req.body.email}</li>
<li>Phone: ${req.body.phone}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({service: 'gmail ',
auth: {
user: 'atul.11192@gmail.com',
pass: 'xxxxxxx'
},
tls:{
rejectUnauthorized:false
}
});
// setup email data with unicode symbols
let mailOptions = {
from: '"Enquiry from datadock" <atul.11192@gmail.com>', // sender address
to: 'atul.11192@gmail.com', // list of receivers
subject: 'Datadock Enquiry ', // Subject line
text: 'Hello world?', // plain text body
html: output // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
res.send('error');
}
res.redirect('home.ejs',{message:"message sent"});
});
});
现在我想编写一个jquery函数来读取我从该方法发送的响应并显示模式,如何编写此代码?由于路由很多,我不得不使用j查询,因为使用javascript是不可能的
答案 0 :(得分:1)
由于要重定向到新路由器,因此需要设置要发送到会话中前端的数据。您可以通过将响应发送到同一路由器来避免这种情况。要实现这一目标:
jQuery('button').on('click', function(event) {
event.preventDefault();
jQuery.ajax({
url: '/sendemail',
dataType: 'json',
success: function(data) {
alert(data.message);
jQuery('.yourModal').text(data.message).show();
/*setTimeout(function() {
//window.location.href = data.yourRedirectUrl;
}, 1000);*/
}
});
});
然后您需要替换以下内容:
res.redirect('home.ejs',{message:"message sent"})
与此:
res.end(JSON.stringify({message:"message sent", yourRedirectUrl: '/home'});
如果仍然需要重定向,则可以取消注释我在ajax脚本中添加的setTimeout
函数。
编辑:或者,您可以将重定向设置为具有哈希值
res.redirect('home#mailsent',{message:"message sent"})
然后将以下内容放到home.ejs中:
jQuery(document).on(‘load’, function(){
if(window.location.hash == ‘mailsent’) {
// Do stuff with your modal here
}
});