我有一个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的异步特性,我没有得到任何响应。
答案 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);
});
});