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

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

这是我尝试过的,但是一直都是错误的。

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服务。

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

我已经testing过了,有时候网站不是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

使用普通的Node 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!!'); } }); 

只需使用linkvariables。

最后,我破解了这个。 我怀疑这个问题是因为我在代理的背后。 所以我修改了@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的回答,真的帮我弄明白了。