簡體   English   中英

使用 Node JS 檢查多個網站狀態

[英]Multiple Website Status Check with Node JS

我想運行一個節點應用程序來檢查多個網站並以正確的狀態代碼響應。 我正在使用 Node 本身的“請求”模塊。

我的代碼是:

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。

如果我有一組網址,例如:

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));
});

您還可以使用 request-promise-native 庫來獲得更好的 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));
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM