2016-07-28 8 views
1

Hallo Ich versuche, einen http-Aufruf in einem Zeitplan zu machen. Das erste Auftreten im Zeitplan funktioniert gut ab dem 2. Vorkommen Ich bekomme leere Objekte undefiniert.nodejs HTTP-Anfrage in rekursivem Muster

Die Ausgabe ist wie folgt, Warum funktioniert es nicht, wenn es als Zeitplan ausgeführt wird?

Expity date is Oct 5 13:16:00 2016 GMT 
Expity date is undefined 

Antwort

0

Nach einigen schmerzhaften Debuggen fanden heraus, dass das Anforderungsobjekt einen Agenten verwendet eine Verbindung zu initiieren und verwendet die vorherige bestehende Verbindung und fordern Sie nicht wieder für Zertifikate. Daher das Verhalten. Um es zu lösen, benutze "agent" als Option und setze es auf false.

Modifizierter Code unten.

var https = require('https'); 
var schedule = require('node-schedule'); 
var rule = new schedule.RecurrenceRule(); 
rule.second = 10; 
schedule.scheduleJob(rule, function(){ 

var options = { 
    host: 'online.hmrc.gov.uk', 
    method: 'get', 
    path: '/', 
    agent: 'false' // essential to close down previous conncetion pools and make a fresh call. 
}; 
options.agent = new https.Agent(options); // Initialise a new agent with options as its parameters. 
var req = https.request(options, function(res) { 
    // some code 
    console.log('Expity date is ' + res.socket.getPeerCertificate(true).valid_to); 


}); 
req.end(); 
});