node.js检查是否存在远程URL

如何检查url是否存在,而不是拉下来? 我使用下面的代码,但它下载整个文件。 我只需要检查它是否存在。

app.get('/api/v1/urlCheck/', function (req,res) { var url=req.query['url']; var request = require('request'); request.get(url, {timeout: 30000, json:false}, function (error, result) { res.send(result.body); }); }); 

感谢任何帮助!

尝试这个:

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

谢谢! 这里是封装在一个函数中(在5/30/17更新, 需要外部):

  var http = require('http'), url = require('url'); exports.checkUrlExists = function (Url, callback) { var options = { method: 'HEAD', host: url.parse(Url).host, port: 80, path: url.parse(Url).pathname }; var req = http.request(options, function (r) { callback( r.statusCode== 200);}); req.end(); } 

这很快(我得到了大约50毫秒,但这取决于你的连接和服务器的速度)。 请注意,这也是相当基本的,即它不会很好地处理redirect。

只需使用npm包https://www.npmjs.com/package/url-exists来testingurl是否存在

 var urlExists = require('url-exists'); urlExists('https://www.google.com', function(err, exists) { console.log(exists); // true }); urlExists('https://www.fakeurl.notreal', function(err, exists) { console.log(exists); // false }); 

“需要”function在Node中是错误的。 后面的es6方法支持所有正确的http状态,当然如果你得到像fff.kkk这样糟糕的“主机”,就会检索错误

 checkUrlExists(host,cb) { http.request({method:'HEAD',host,port:80,path: '/'}, (r) => { cb(null, r.statusCode > 200 && r.statusCode < 400 ); }).on('error', cb).end(); }