Express 控制台中未定义

Express 控制台中未定义,express,nodemailer,Express,Nodemailer,我尝试为nodemailer创建单独的函数,并期望返回布尔值true或false。但当邮件发送给用户时,我会在帐户中获取邮件,但在此之后,返回的值不是true或false,而是未定义的值 function nodeMailer(mailOptions){ var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: get.username,

我尝试为nodemailer创建单独的函数,并期望返回布尔值true或false。但当邮件发送给用户时,我会在帐户中获取邮件,但在此之后,返回的值不是true或false,而是未定义的值

function nodeMailer(mailOptions){

 var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: get.username,
            pass: get.password
        },
        tls: {
            rejectUnauthorized : false
        }
    });


    transporter.sendMail(mailOptions, (error, info) => {
       if(error) return false;

       return true;
    });
}

您正处于未定义状态,因为
true
false
应返回您的
nodeMailer
函数,而不是
transporter.sendMail
。 在这种情况下,您可以创建
Promise
,它可以帮助您实现这一点

var nodeMailer = function(mailOptions) {
    return new Promise(function(resolve, reject){
        var transporter = nodemailer.createTransport({
            service: 'gmail',
            auth: {
                user: get.username,
                pass: get.password
            },
            tls: {
                rejectUnauthorized : false
            }
        });


        transporter.sendMail(mailOptions, (error, info) => {
           if(error) reject(error);

           resolve(info);
        });
       }
   });
}
然后像下面这样兑现你的承诺

nodeMailer(yourOptions).then(function(result) {
    // handle success result here
    return info; 
})
.catch(function(err) {
     // handle your error here
})

更多关于你可以阅读的承诺。当您需要控制异步流时,它们非常有用。

您没有定义,因为
true
false
应该返回您的
nodeMailer
函数,而不是
transporter.sendMail
。 在这种情况下,您可以创建
Promise
,它可以帮助您实现这一点

var nodeMailer = function(mailOptions) {
    return new Promise(function(resolve, reject){
        var transporter = nodemailer.createTransport({
            service: 'gmail',
            auth: {
                user: get.username,
                pass: get.password
            },
            tls: {
                rejectUnauthorized : false
            }
        });


        transporter.sendMail(mailOptions, (error, info) => {
           if(error) reject(error);

           resolve(info);
        });
       }
   });
}
然后像下面这样兑现你的承诺

nodeMailer(yourOptions).then(function(result) {
    // handle success result here
    return info; 
})
.catch(function(err) {
     // handle your error here
})

更多关于你可以阅读的承诺。当您需要控制异步流时,它们非常有用。

使用回调或承诺尝试此操作。

使用回调或承诺尝试此操作。

我建议在出现错误时使用
拒绝
,在工作正常时解决
信息
。Welcom,要获得更漂亮的代码,您可以查看ES7的async/Wait,不带transpilers的v8已经支持这一点,如果出现错误,我建议使用
reject
,如果可以解决
info
。Welcom,要获得更漂亮的代码,您可以查看ES7的async/Wait,它已经由不带transpilers的v8支持,您可以在这里准备更多