Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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 使用Node JS检查多个网站的状态_Javascript_Node.js_Express_Requestjs - Fatal编程技术网

Javascript 使用Node JS检查多个网站的状态

Javascript 使用Node JS检查多个网站的状态,javascript,node.js,express,requestjs,Javascript,Node.js,Express,Requestjs,我想运行一个节点应用程序,可以检查多个网站,并用正确的状态代码进行响应。我正在使用节点本身的“请求”模块 我的密码是: const request = require('request') function getStatus() { request('https://www.google.com', function(error, response, body) { result = response.statusCode; if(!error &

我想运行一个节点应用程序,可以检查多个网站,并用正确的状态代码进行响应。我正在使用节点本身的“请求”模块

我的密码是:

const request = require('request')

function getStatus() {
    request('https://www.google.com', function(error, response, body) {

        result = response.statusCode;

        if(!error && response.statusCode == 200) {
            document.write("The Site Is Up");
            console.log(result);
        } else {
            console.log("The Site Is Down");
        }
    });
}
这对一个网站来说很好。但是,我想知道如何在多个站点上运行相同的功能?例如,url应该由url数组提供

如果我有一个URL数组,例如:

var urls = ["https://www.google.com", "https://www.yahoo.com"];

如何将这些单独的URL提供给请求函数?并获得每个站点的结果?

您可以通过一系列承诺来实现这一点,应该很容易做到:

const request = require('request')

const urlList = ["https://www.google.com", "https://www.amazon.com"];

function getStatus(url) {
    return new Promise((resolve, reject) => {
        request(url, function(error, response, body) {
            resolve({site: url, status: (!error && response.statusCode == 200) ? "OK": "Down: " + error.message});
        });
    })   
}

let promiseList = urlList.map(url => getStatus(url));

Promise.all(promiseList).then(resultList => {
    resultList.forEach(result => console.log("Result: ", result));
});
您还可以向我们请求promise本机库以获得更好的API:

    const request = require('request')
    const rp = require('request-promise-native')

    const urlList = ["https://www.google.com", "https://www.amazon.com", "https://doesnotexist.none", "https://wikipedia.org"];

    function getStatusRp(url) {
        return rp({uri: url, resolveWithFullResponse: true }).then((response) => {
            return { site: url, status: response.statusCode === 200 ? "OK": "Down"};
        }, (err) => {
            return { site: url, status: "Down: " + err.message};
        });
    }

    let promiseList = urlList.map(url => getStatusRp(url));

    Promise.all(promiseList).then(resultList => {
        resultList.forEach(result => console.log("Result: ", result));
    });

您是否在询问如何编写循环?是否也可以在cron作业中运行此函数,例如每隔30分钟定期运行一次?是的,确实是@ZakiSediqyar。有一个优秀的图书馆,可以做到这一点!谢谢你的反馈,特里。不过,我还有一个问题。我用mongoose创建了一个带有node和mongodb的CRUD应用程序,我存储了网站名称和url。我希望应用程序持续运行请求模块并获取URL的response.StatusCode。我还想使用手柄将该响应解析为前端。我可以做前端部分,我只是不能让mongo查询的返回对象提供函数的url参数。我建议为此创建一个单独的堆栈溢出问题!