从Node.Js和Express.Js中的导入函数返回响应

时间:2017-10-26 07:10:22

标签: javascript node.js express nodemailer

我有一个express.js post方法,我在其中调用一个代码如下的函数:

    module.exports.sendEmail = function(to,subject,message){
        var transporter = nodemailer.createTransport({
          service : 'gmail',
          auth:{
            user : "",
            pass : ""
          }
        });
        var mailOptions = {
          from:'findadriver9@gmail.com',
          to: to,
          subject:subject,
          html:message
        };
        return transporter.sendMail(mailOptions).then(function(data){
          var result ={
            success:true,
            message:"Email Sent"
          }
          return result;
        }).catch(function(err){
          var err={
            success:false
          };
      return err;
    });
   }

如何调用该函数,以便根据成功和失败我可以定义响应?

var response = sendEmail.sendEmail(req.body.empemail,subject,details);
res.send(response);

我尝试了上述方法,但由于Node.js的异步特性,我没有得到任何响应。

2 个答案:

答案 0 :(得分:2)

对sendEmail函数进行更改,添加一个额外的参数作为回调函数,如下所示

module.exports.sendEmail = function(to,subject,message,cb){
    var transporter = nodemailer.createTransport({
      service : 'gmail',
      auth:{
        user : 'demo.user@mail.com',
        pass : 'demo#password'
      }
    });
    var mailOptions = {
      from:'demo.user@mail.com',
      to: to,
      subject:subject,
      html:message
    };
    return transporter.sendMail(mailOptions).then(function(data){
      var result ={
        success:true,
        message:"Email Sent"
      }
      cb(result);
    }).catch(function(err){
      var err={
        success:false
      };
  cb(err);
});
}

这里,这个函数不会返回任何结果,但是在完成工作后它会将结果发送给回调函数。

现在将此功能称为下面的

  sendEmail.sendEmail(req.body.empemail,subject,details,function(result){
   res.send(result);
  });

答案 1 :(得分:0)

您需要等待发送的电子邮件:

app.post("/mail", async function(req,res){
  const response = await sendEmail.sendEmail(req.body.empemail,subject,details);
  //do whatever
  res.send(response);
});

仅对好(旧)承诺做同样的事情:

app.post("/", function(req, res){
 sendEmail
   .sendEmail(req.body.empemail,subject,details)
   .then(function(response){
      //do whatever
      res.send(response);
   });
});