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

Returning response from an imported function in Node.Js and Express.Js

我有一个 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 的异步性质,我没有收到任何响应。

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

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

对您的 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);
});
}

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

现在调用这个函数如下

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