[英]Node.js change HTML code with a callback function
通過nodemailer發送電子郵件后,我想使用HTML顯示確認消息。 我對Node很陌生,所以不確定是否缺少明顯的東西。
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
... (Something here that is going to print a confirmation message to the html code of the page)
});
res.end("yes");
});
謝謝
你應該將調用res.end()
里面sendMail()
回調,例如:
app.post("/bye", function (req, res) {
// send e-mail
var transporter = nodemailer.createTransport({});
var mailOptions = {};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
res.status(500).send({
message: 'Unable to send mail'
});
}
console.log('Message sent: ' + info.response);
res.status(200).send({
message: 'Mail sent successfully'
});
});
});
然后,您需要在客戶端處理此消息,以向用戶顯示正常或失敗的消息。
Node完全獨立於瀏覽器運行,因此您無法從Node直接在瀏覽器中修改HTML。 您需要從節點向瀏覽器發送響應,然后在瀏覽器中處理該響應。 它可能像這樣工作...
節點
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error)
res.end({
success: false,
msg: error
});
}
console.log('Message sent: ' + info.response);
res.end({
success: true
});
});
});
然后在您的客戶端javascript中(為簡單起見,使用jQuery post,但使用普通的javascript請求,或者如果您願意,可以使用其他庫)...
$.post('/bye').then(function(response) {
if (response.success) {
$('#msg').text('Your message was sent');
} else {
$('msg').text(response.msg);
}
}).catch(function(err) {
$('#msg').text('Could not reach server');
});
res
是將對象發送回客戶端的對象。
您可以使用以下方式編寫您的消息:
res.send('your message');
我會刪除您的res.end("yes");
在末尾。 它可能會在您完成發送郵件之前發送響應。
因此您的代碼如下:
app.post("/bye", function(req, res){
// send e-mail
var transporter = nodemailer.createTransport({
...
});
var mailOptions = {
...
}
transporter.sendMail(mailOptions, function(error, info){
if(error){
res.status(500).end('error');
return console.log(error);
}
console.log('Message sent: ' + info.response);
res.status(200).send('your message');
});
});
Tutorialspoint對快遞有很好的介紹。 也許它可以幫助您。
也許您可以將res.end("...")
放入.sendMail(... function() {
而不是之后。
如果要顯示整個html頁面,可以將HTML文件發送到瀏覽器:
res.sendfile('views/test.html', {root: __dirname })
否則,如果要在當前html頁面上顯示錯誤消息,則應將JSON數據發送到客戶端,其中包含消息,消息類型等,請在客戶端中解析json並進行呈現:
res.send(JSON.stringify({message: 'message' , type: 'success'});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.