簡體   English   中英

Node.js使用回調函數更改HTML代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM