Daniel H
Daniel H

Reputation: 5

Node Call Export on Callback

I'm banging my head for not learning from the basics and just jumping in.

I'm building an API that returns the SSL Certificate status of a domain. It's working fine on console.log but the JSON output is empty, obviously because the exports get executed before the https request ends.

How do I incorporate the exports in response.on(end) function? Thanks a lot!

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

Upvotes: 0

Views: 46

Answers (1)

Sukima
Sukima

Reputation: 10074

Yes, the response.send(sslCheck); gets executed before getSSL(id); has a chance to finish. You need to send in a callback so it can be executed after getSSL(id); finishes:

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

Upvotes: 2

Related Questions