我的问题可能很直接,但我无法弄清楚幕后发生了什么。我正在遍历数据库表中的一系列域,调用它们,获取 SSL 证书并将有关它的信息存储回数据库中。
在大多数情况下,它正在工作 - 除非循环退出任何尚未完成的调用,只是停止死机。
开始检查的数据库检索:
function queryRows() {
complete = false;
var query = c.query("SELECT * FROM domains LIMIT 100 OFFSET " + offset);
query.on('result', function(res) {
res.on('data', function(row) {
checkUrl(row)
}).on('end', function() {
complete = true;
});
}).on('end', function() {
console.log(complete);
offset += 100;
if(offset <= (parseInt(rows) + 400)){
queryRows();
} else {
console.log("Done, waiting");
setTimeoutPromise(600000, 'foobar').then((value) => {
console.log("restarting")
offset = 0;
getTotal();
});
}
});
}
以及检查 SSL 的代码:
function checkSSL(id, domain){
complete = false
var options = {
host: domain,
rejectUnauthorized: false
};
callback = function(response) {
var str = '';
try {
if(domain == "arstechnica.com"){
console.log("Found ars - savingCertificate");
}
cert = response.connection.getPeerCertificate(true);
complete = hasSSL(cert, domain, id);
// updateDomainRecord(cert, domain, id)
} catch (error){
console.log(error);
complete = true;
noSSLRecord(domain, id);
}
}
const req = https.request(options, callback);
req.on('error', (e) => {
// console.error(e);
});
}
值得注意的是,如果我在 https.request 之前放置一个 console.log,我会在我的控制台中看到它。但是,回调中的任何日志都无法触发(因为回调本身永远不会触发)。
同样,有时回调确实如此。它仅在数据库循环结束时似乎停止工作。任何意见,将不胜感激!