如何检查一个url(或webservice)是否在Nodejs中存在?

问题描述:

我们如何检查一个web服务或网站是否在nodejs中存在?我正在使用节点版本6.11并表示。我尝试在npm中使用isAlive,但没有运气。如何检查一个url(或webservice)是否在Nodejs中存在?

这是我尝试过的一个,但它始终返回false。

var IsAlive = require('is-alive'); 
var isAlive = new IsAlive(); 
isAlive.add("http://google.com", 301, function (err) { 
    "use strict"; 

    if (err) { 
     console.log(err); 
    } 
}); 

setInterval(function() { 
    console.log(isAlive.isAlive("http://google.com")); 
}, 2000); 

console.log(isAlive.isAlive("http://google.com")); 

我用使用HTTP以及像:

http.get('http://google.com', function (res) { 
console.log(res); 

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

});; 

而且还喜欢:

var request = require('request'); 
    options = {method: 'HEAD', host: 'stackoverflow.com', port: 80, path: '/'}, 
    req = http.request(options, function(r) { 
     console.log(JSON.stringify(r.headers)); 
    }); 
req.end(); 

使用状态代码以及尝试:

var http = require("http"); 
http.get({host: "google.com"},function(res){ 
    if (res.statusCode ==200) 
     console.log ("running"); 
     else 
console.log ("not running"); 


}); 

我们可以使用任何其他方法?基本上我的要求是检查是否在不同的服务器上的Web服务。

+0

难道你只是检查http状态码? –

+0

@NicoVanBelle你能否详细说明一下?我也尝试使用http(请参阅编辑的问题)。但是这并不是很好。当我调试控制台正在记录任何东西。 – Amal

+0

@NicoVanBelle我是新来堆栈流,我甚至无法提出答案。如果我错了,请原谅我,但请帮助。 – Amal

最后,我破解了这个。我怀疑这个问题是因为我在一个代理的背后。所以我修改通过@turmuka等给出代码:

var request = require('request'); 

    var link = "https://nodejs.org/"; 

    var proxyUrl = "http://" + user + ":" + password + "@" + host + ":" + port; 

var proxiedRequest = request.defaults({'proxy': proxyUrl}); 

    proxiedRequest(link , function (error, response, body) { 

     if(error){ 
     console.log('Err: '+ error); 
     return false; 
     } 

    if(response.statusCode == 200 || response.statusCode == 201 || response.statusCode == 202){ 
     console.log(link + ' is up!!'); 
     return false; 
    } 

    if(response.statusCode == 301 || response.statusCode == 302){ 
     console.log(link + ' is redirecting us!!'); 
     return false; 
    } 

    if(response.statusCode == 401){ 
     console.log("you are unauthorized to " + link); 
     return false; 
    }else{ 
     console.log(link + ' is down!!'); 
    } 

    }); 

所以基本上,我需要设置代理服务器的请求,以确保代理不会阻止呼叫。 非常感谢@turmuka的回答,真的帮我弄明白了。

+0

非常棒的工作!我知道这将是*代理证书*。很高兴你做到了,我有一些帮助@Amal – turmuka

我已经为你编写了一个小程序,该程序从https://isitdownorjust.me/中提取数据,它检查一个网站是否启动或关闭。

我测试过了,有时网站并不是100%稳定,但程序运行良好。

下面是代码

var request = require('request'); 

var website = "stackoverflow", 
    ext = "com"; 



request('https://isitdownorjust.me/'+ website +'-' + ext + '/', function (error, response, body) { 

    if(error){ 
    console.log('Err: '+ error); 
    return false; 
    } 

    if(body.match('seems to be working.')){ 
    console.log(website + '.' +ext+' is up according to isitdownorjust.me'); 
    }else{ 
    console.log(website + '.' +ext+"the website is down according to isitdownorjust.me"); 
    } 

}); 

用法

所有您需要做的就是把网站名称那里,它的扩展底部。您不必使用.(点)

希望你喜欢它..

UPDATE

随着使用普通节点JS模块

var request = require('request'); 

var link = "https://nodejs.org/"; 



request(link , function (error, response, body) { 

    if(error){ 
    console.log('Err: '+ error); 
    return false; 
    } 

if(response.statusCode == 200 || response.statusCode == 201 || response.statusCode == 202){ 
    console.log(link + ' is up!!'); 
    return false; 
} 

if(response.statusCode == 301 || response.statusCode == 302){ 
    console.log(link + ' is redirecting us!!'); 
    return false; 
} 

if(response.statusCode == 401){ 
    console.log("you are unauthorized to " + link); 
    return false; 
}else{ 
    console.log(link + ' is down!!'); 
} 

}); 

只需使用link变量。

+0

为什么你会这么做 –

+0

因为它很有趣?那是什么反应? @NicoVanBelle – turmuka

+0

谢谢,但是请您确认我们是否可以在没有外部网站的情况下使用它,只需点击所需的网址? – Amal