Node.js使用回调函数更改HTML代码

时间:2016-12-07 13:28:51

标签: javascript node.js express

我想通过nodemailer发送电子邮件后,使用HTML显示确认消息。我对节点很新,所以我不确定我是否遗漏了一些明显的东西。

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");
});

由于

5 个答案:

答案 0 :(得分:1)

您应该将呼叫转移到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'
        });
    });
});

然后,您需要在客户端处理此消息,以向用户显示正常或失败的消息。

答案 1 :(得分:1)

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帖子,但是如果你愿意,可以使用简单的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');
});

答案 2 :(得分:0)

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对快递有很好的介绍。也许它可以帮到你。

答案 3 :(得分:0)

也许你可以将res.end("...")放入.sendMail(... function() {而不是之后。

答案 4 :(得分:0)

如果你想显示一个完整的html页面,你可以发送和html文件到浏览器:



 res.sendfile('views/test.html', {root: __dirname })




否则,如果要在当前html页面上显示错误消息,则应将json数据发送到包含消息,消息类型等的客户端,解析客户端中的json并呈现它:



res.send(JSON.stringify({message: 'message' , type: 'success'});