Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Javascript 获取循环中URL的主机名-Nodejs_Javascript_Node.js_Httpresponse_Hostname_Http Response Codes - Fatal编程技术网

Javascript 获取循环中URL的主机名-Nodejs

Javascript 获取循环中URL的主机名-Nodejs,javascript,node.js,httpresponse,hostname,http-response-codes,Javascript,Node.js,Httpresponse,Hostname,Http Response Codes,因此,我目前正在尝试制作一个http状态代码检查器。但由于某些原因,响应主机名返回未定义,但我可以检索响应状态代码。我抓到它了吗 var fs = require('fs'); var http = require('http'); var stdin = process.openStdin(); stdin.addListener('data', function (userInput) { var urlListPath = userInput.toString().trim();

因此,我目前正在尝试制作一个http状态代码检查器。但由于某些原因,响应主机名返回未定义,但我可以检索响应状态代码。我抓到它了吗

var fs = require('fs');
var http = require('http');
var stdin = process.openStdin();
stdin.addListener('data', function (userInput) {
    var urlListPath = userInput.toString().trim();
    fs.readFile(urlListPath, function (err, data) {
        if (err) {
            return console.log(err);
        }
    var urlArray = data.toString().split("\n");
        urlArray =  urlArray.filter(Boolean);

        for (var i = 0; i < urlArray.length; i++){
            http.get({hostname: urlArray[i]}, function(res){
                console.log(res.hostname + ' | ' + res.statusCode + ' | ' + res.statusMessage);
            });
        }
  });
});

按照@bluesman的建议,通过在函数中换行来解决:

var fs = require('fs');
var http = require('http');
var stdin = process.openStdin();
stdin.addListener('data', function (userInput) {
    var urlListPath = userInput.toString().trim();
    fs.readFile(urlListPath, function (err, data) {
        if (err) {
            return console.log(err);
        }
    var urlArray = data.toString().split("\n");
        urlArray =  urlArray.filter(Boolean);

        for (var i = 0; i < urlArray.length; i++){
            getHttpInfo(urlArray[i]);
        }
  });
});

function getHttpInfo(url){
    http.get({hostname: url}, function(res){
        console.log(url + ' : ' + res.statusCode + ' | ' + res.statusMessage);
    });
}

把它放在一个以url为参数的函数中。。。为什么会有不同?每次迭代都会得到一个传递给http.get的新对象,并且每次迭代都会将值从数组复制到所述对象,啊,我明白了,你不再从res获取主机,而是从原始对象获取主机。所以你只是解决了这个问题,这是可以接受的。