Javascript javasctipt-返回值的异步问题

Javascript javasctipt-返回值的异步问题,javascript,node.js,mongoose,mean-stack,Javascript,Node.js,Mongoose,Mean Stack,我在MEAN STACK应用程序中工作,我想动态设置邮件的参数 route.js Helper.js 依赖关系 从以下代码sitesetingfunction console.log正确打印,但在返回邮件发送之前发生错误。 请给我一个关于该代码的正确指南。这可以通过以下方式解决 exports.sendCustomEmail = function(params, callback) { //Include nodejs mailer and smtp module var nod

我在MEAN STACK应用程序中工作,我想动态设置邮件的参数

route.js

Helper.js

依赖关系

从以下代码sitesetingfunction console.log正确打印,但在返回邮件发送之前发生错误。
请给我一个关于该代码的正确指南。

这可以通过以下方式解决

exports.sendCustomEmail = function(params, callback) {
    //Include nodejs mailer and smtp module
    var nodemailer = require('nodemailer');
    var smtpTransport = require('nodemailer-smtp-transport');
    //read header email template
    var headerHtml = fs.readFileSync(basePath + "app/client/views/layout/emailTemplates/emailHeader.html").toString();
    //read footer email template
    var footerHtml = fs.readFileSync(basePath + "app/client/views/layout/emailTemplates/emailFooter.html").toString();
    //Your dynamic template html only
    var dynamicMessage = params.message;
    var message = headerHtml + dynamicMessage + footerHtml;
    message = message.replace(/##DOMAIN_URL##/g, "http://" + params.domainUrl);


    var host = null;
    var user = null;
    var pass = null;
    var from = null;

    this.getSiteSetting("SMTP_HOST", function(res) {
        host = res;
        setParams();
    });
    this.getSiteSetting("SMTP_USER", function(res) {
        user = res;
        setParams();
    });
    this.getSiteSetting("SMTP_PASS", function(res) {
        pass = res;
        setParams();
    });
    this.getSiteSetting("MAIL_FROM", function(res) {
        from = res;
        setParams();
    });

    var setParams = function() {
        if (host !== null && user !== null && pass !== null && from !== null) {
            // create reusable transporter object using the default SMTP transport
            var transporter = nodemailer.createTransport(smtpTransport({
                host: host,
                //port: 25,
                //port: 465,
                secure: true,
                auth: {
                    user: user,
                    pass: pass
                },
                tls: {
                    rejectUnauthorized: false
                }
            }));

            transporter.sendMail({
                from: from,
                to: params.to, // receiver
                subject: params.subject,
                html: message // body
            }, function(error, response) { //callback
                callback(error, response);
            });
        }
    };
}

var SiteSetting = require('../models/siteSetting');
exports.getSiteSetting = function(keyword, callback) {
    if (keyword !== undefined && keyword !== null && keyword !== "") {
        SiteSetting.findOne({ setting_key: keyword }, function(err, siteSetting) {
            if (err) {
                callback(null);
            } else {
                if (siteSetting !== null) {
                    //console.log(siteSetting.setting_value);
                    callback(siteSetting.setting_value);
                }else{
                    callback(null);
                }
            }
        });
    } else {
        callback(null);
    }
};

哦,太好了,大量的任意代码,没有输出或错误日志。。
exports.sendCustomEmail = function(params, callback) {
    //Include nodejs mailer and smtp module
    var nodemailer = require('nodemailer');
    var smtpTransport = require('nodemailer-smtp-transport');
    //read header email template
    var headerHtml = params.fs.readFileSync(basePath + "emailHeader.html").toString();
    //read footer email template
    var footerHtml = params.fs.readFileSync(basePath + "emailFooter.html").toString();
    //Your dynamic template html only
    var dynamicMessage = params.message;
    var message = headerHtml + dynamicMessage + footerHtml;
    message = message.replace(/##DOMAIN_URL##/g, "http://" + params.domainUrl);
    // create reusable transporter object using the default SMTP transport
    var transporter = nodemailer.createTransport(smtpTransport({
        host: this.getSiteSetting("SMTP_HOST"),
        secure: true,
        auth: {
            user: this.getSiteSetting("SMTP_USER"),
            pass: this.getSiteSetting("SMTP_PSSSWORD")
        },
        tls: {
            rejectUnauthorized: false
        }
    }));
    transporter.sendMail({
        from: this.getSiteSetting("SMTP_FROM"),
        to: params.to, // receiver
        subject: params.subject,
        html: message // body
    }, function(error, response) { //callback
        callback(error, response);
    });
};


var SiteSetting = require('../models/siteSetting');
exports.getSiteSetting = function($keyword) {
    if ($keyword !== undefined && $keyword !== null && $keyword !== "") {
        SiteSetting.findOne({setting_key : $keyword},function(err,siteSetting){
            if(err){
                return null;
            }else{
                if(siteSetting !== null){
                    console.log(siteSetting.setting_value);
                    return siteSetting.setting_value;
                }
            }
        });
    }else{
        return null;
    }
};
"express"  => "version": "4.13.4",
"mongoose" => "version": "4.4.4",
"mongodb"  => "version": "2.4.9",
"OS"  => "ubuntu 14.04 lts 32bit",
exports.sendCustomEmail = function(params, callback) {
    //Include nodejs mailer and smtp module
    var nodemailer = require('nodemailer');
    var smtpTransport = require('nodemailer-smtp-transport');
    //read header email template
    var headerHtml = fs.readFileSync(basePath + "app/client/views/layout/emailTemplates/emailHeader.html").toString();
    //read footer email template
    var footerHtml = fs.readFileSync(basePath + "app/client/views/layout/emailTemplates/emailFooter.html").toString();
    //Your dynamic template html only
    var dynamicMessage = params.message;
    var message = headerHtml + dynamicMessage + footerHtml;
    message = message.replace(/##DOMAIN_URL##/g, "http://" + params.domainUrl);


    var host = null;
    var user = null;
    var pass = null;
    var from = null;

    this.getSiteSetting("SMTP_HOST", function(res) {
        host = res;
        setParams();
    });
    this.getSiteSetting("SMTP_USER", function(res) {
        user = res;
        setParams();
    });
    this.getSiteSetting("SMTP_PASS", function(res) {
        pass = res;
        setParams();
    });
    this.getSiteSetting("MAIL_FROM", function(res) {
        from = res;
        setParams();
    });

    var setParams = function() {
        if (host !== null && user !== null && pass !== null && from !== null) {
            // create reusable transporter object using the default SMTP transport
            var transporter = nodemailer.createTransport(smtpTransport({
                host: host,
                //port: 25,
                //port: 465,
                secure: true,
                auth: {
                    user: user,
                    pass: pass
                },
                tls: {
                    rejectUnauthorized: false
                }
            }));

            transporter.sendMail({
                from: from,
                to: params.to, // receiver
                subject: params.subject,
                html: message // body
            }, function(error, response) { //callback
                callback(error, response);
            });
        }
    };
}

var SiteSetting = require('../models/siteSetting');
exports.getSiteSetting = function(keyword, callback) {
    if (keyword !== undefined && keyword !== null && keyword !== "") {
        SiteSetting.findOne({ setting_key: keyword }, function(err, siteSetting) {
            if (err) {
                callback(null);
            } else {
                if (siteSetting !== null) {
                    //console.log(siteSetting.setting_value);
                    callback(siteSetting.setting_value);
                }else{
                    callback(null);
                }
            }
        });
    } else {
        callback(null);
    }
};