2015-07-13 2 views
0

Я стучал голова не учиться основ и просто прыгать.Узел вызов Экспорт на обратном вызове

Я построение API, который возвращает статус SSL сертификата домена. Он отлично работает на 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); 
 
};

+0

'getSSL' нужен обратный вызов в качестве второго пар, чтобы вернуть данные. Это будет выглядеть так: 'getSSL (id, function (data) {response.send (data)});' – tymeJV

+0

[Связанный/обман] (http://stackoverflow.com/questions/14220321/how-to-return -the-response-from-a-асинхронный вызов), в соответствии с которым 'isAuth' - это то, что вы хотите передать в конечную функцию обратного вызова, возможно, определенную в вашей функции' findByDomain'. –

ответ

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

Спасибо большое, отлично работал! Теперь мне просто нужно исследовать лучший способ получения информации SSL без накладных расходов на всю первую страницу html. –

Смежные вопросы