从Node.Js和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的asynchronous性质,我没有得到任何回应。

改变你的sendEmail函数,添加一个额外的参数作为callback函数

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

在这里,这个函数不会返回任何结果,但是在结束工作后它会把结果发送到callback函数。

现在将这个函数调用如下

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

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

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