Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 响应回调中的节点https请求选项_Node.js_Https - Fatal编程技术网

Node.js 响应回调中的节点https请求选项

Node.js 响应回调中的节点https请求选项,node.js,https,Node.js,Https,我正在对设置了https的节点发出https请求。列表中的每个本地IP都映射到不同的公共IP 我只是简单地尝试打印由internet上的服务器报告的公共IP和相应的本地IP。问题是我不确定如何在响应回调中获取请求选项: var https = require('https'); var localIps = [ '192.168.88.135', '192.168.88.136', '192.168.88.137', '192.168.88.138',

我正在对设置了https的节点发出https请求。列表中的每个本地IP都映射到不同的公共IP

我只是简单地尝试打印由internet上的服务器报告的公共IP和相应的本地IP。问题是我不确定如何在响应回调中获取请求选项:

var https = require('https');

var localIps = [
    '192.168.88.135',
    '192.168.88.136',
    '192.168.88.137',
    '192.168.88.138',
    '192.168.88.139',
];

for(index in localIps) {
    var localIp = localIps[index];

    var options = {
        localAddress: localIp,
        host: 'mypublicserver.com',
        path: '/whats-my-ip.php'
    };

    https.get(options, function(res) {
        res.on('data', function(d) {
            console.log(
                // XXX localIp is always printing the last IP from localIps
                'Local Network IP: ' + localIp +
                ' Public Outbound IP: ' + d);
        });

    }).on('error', function(e) {
        console.error(e);
    });
}
它在打印这样的东西,这是错误的

Local Network IP: 192.168.88.139 Public Outbound IP: 88.88.888.132
Local Network IP: 192.168.88.139 Public Outbound IP: 88.88.888.131
Local Network IP: 192.168.88.139 Public Outbound IP: 88.88.888.130
Local Network IP: 192.168.88.139 Public Outbound IP: 88.88.888.133
Local Network IP: 192.168.88.139 Public Outbound IP: 88.88.888.134
那么,如何在响应回调中获得正确的options对象呢


显然res是一个,但我无法找到如何从中获取关联的请求对象。

问题是for循环将在任何响应返回之前完成对localIps的迭代。因此,当第一个响应返回时,localIp变量被设置为localIps数组的最后一个ip

最简单的方法是将代码封装在闭包中,或者也称为IIFE->立即调用函数表达式

var https = require('https');

var localIps = [
    '192.168.88.135',
    '192.168.88.136',
    '192.168.88.137',
    '192.168.88.138',
    '192.168.88.139',
];

for(index in localIps) {
    var localIp = localIps[index];

    var options = {
        localAddress: localIp,
        host: 'mypublicserver.com',
        path: '/whats-my-ip.php'
    };

    (function(opts){

        https.get(opts, function(res) {
            res.on('data', function(d) {
                console.log(
                    // XXX localIp is always printing the last IP from localIps
                    'Local Network IP: ' + opts.localAddress +
                    ' Public Outbound IP: ' + d);
            });

        }).on('error', function(e) {
            console.error(e);
        });

    })(options);
}
寻找更多