Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Node.Js和Express.Js中导入的函数返回响应_Javascript_Node.js_Express_Nodemailer - Fatal编程技术网

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

Javascript 从Node.Js和Express.Js中导入的函数返回响应,javascript,node.js,express,nodemailer,Javascript,Node.js,Express,Nodemailer,我有一个express.js post方法,在其中调用一个函数,其代码如下: module.exports.sendEmail = function(to,subject,message){ var transporter = nodemailer.createTransport({ service : 'gmail', auth:{ user : "", pass : ""

我有一个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);
});
}
  sendEmail.sendEmail(req.body.empemail,subject,details,function(result){
   res.send(result);
  });
在这里,这个函数不会返回任何结果,但在工作完成后,它会将结果发送给回调函数

现在将此函数称为bellow

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

好的
sendmail.sendmail(…)。然后(result=>res.json(result))谢谢。它正在工作。