node.js - 循环退出时 Node https 回调不触发

标签 node.js ssl https mariasql

我的问题可能很简单,但我无法弄清楚幕后发生了什么。我正在遍历数据库表中的一系列域,调用它们,获取 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,我会在我的控制台中看到它。然而,回调中的任何日志都无法触发(因为回调本身永远不会触发)。

同样,有时回调会发生。它只是接近数据库循环的末尾,似乎停止工作。任何建议将不胜感激!

最佳答案

看起来您的请求从未发送过,因此 callback 永远不会被触发。确保你的请求确实被发送了,所以你必须在最后添加一行:

req.end();

关于node.js - 循环退出时 Node https 回调不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892363/

相关文章:

node.js - 从串口node.js创建新对象时出错

WordPress HTTP 请求 501 内部服务器错误

apache - 安装了自签名 SSL 证书,Apache 无法启动

apache - 在我的网站上使用 https 时出现警告

node.js - 无法使用 Express.js 更改网站图标

node.js - Telegram 机器人 - 接收照片 URL

Node.js 缓冲区字符串序列化

ssl - Socket.IO:跨域请求被阻止:同源策略不允许读取远程资源

php - SSL 连接错误 :140770FC

java - 通过 HTTPS 从应用程序连接到后端服务器会导致延迟/超时