回调节点呼叫导出

时间:2015-07-13 14:59:49

标签: javascript node.js

我正在敲打我的头,因为我没有从基础知识中学习而只是跳进来。

我正在构建一个返回域的SSL证书状态的API。 它在console.log上工作正常,但JSON输出为空,显然是因为导出在https请求结束之前执行。

如何在response.on(end)函数中合并导出? 非常感谢!

function getSSL(domain) {

    var options = {
        host: 'www.'+domain+'.com',
        method: 'get',
        path: '/'
    };

    var isAuth = false;

    callback = function(response) {

        response.on('data', function () {
            isAuth = response.socket.authorized;
        });

        response.on('end', function () {
            console.log(isAuth);
        });

    }   
    
  var req = https.request(options, callback).end();
}

exports.findByDomain = function (req, response) {
    var id = req.params.id;
    sslCheck = getSSL(id);
    response.send(sslCheck);
};

1 个答案:

答案 0 :(得分:2)

是的,response.send(sslCheck);getSSL(id);有机会完成之前执行。您需要发送一个回调,以便在 getSSL(id);完成后执行:

function getSSL(domain, callback) {

    var options = {
        host: 'www.'+domain+'.com',
        method: 'get',
        path: '/'
    };

    var isAuth = false;

    var httpCallback = function(response) {

        response.on('data', function () {
            isAuth = response.socket.authorized;
        });

        response.on('end', function () {
            console.log(isAuth);
            callback(isAuth);
        });

    }

  var req = https.request(options, httpCallback).end();
}

exports.findByDomain = function (req, response) {
    var id = req.params.id;
    getSSL(id, function(sslCheck) {
        response.send(sslCheck);
    });
};