met*_*ate 15 javascript 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);
});
});
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助!
小智 30
试试这个:
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();
Run Code Online (Sandbox Code Playgroud)
Ric*_*all 17
使用url-exist:
import urlExist from "url-exist"
const exists = await urlExist("https://google.com")
// Handle result
console.log(exists)
Run Code Online (Sandbox Code Playgroud)
request现在已被弃用,这导致了url-exists它的失败。使用url-exist来代替。
const urlExist = require("url-exist");
(async () => {
const exists = await urlExist("https://google.com");
// Handle result
console.log(exists)
})();
Run Code Online (Sandbox Code Playgroud)
如果您(出于某种原因)需要同步使用它,则可以使用url-exist-sync.
自 2017 年以来,request回调式函数 (from url-exists) 已不再使用。
但是,有一个修复方法。交换url-exists的url-exist。
所以不要使用:
const urlExists = require("url-exists")
urlExists("https://google.com", (_, exists) => {
// Handle result
console.log(exists)
})
Run Code Online (Sandbox Code Playgroud)
用这个:
const urlExist = require("url-exist");
(async () => {
const exists = await urlExist("https://google.com");
// Handle result
console.log(exists)
})();
Run Code Online (Sandbox Code Playgroud)
如果您有权访问该request软件包,则可以尝试以下操作:
const request = require("request")
const urlExists = url => new Promise((resolve, reject) => request.head(url).on("response", res => resolve(res.statusCode.toString()[0] === "2")))
urlExists("https://google.com").then(exists => console.log(exists)) // true
Run Code Online (Sandbox Code Playgroud)
大部分逻辑已经由url-exists.
Nic*_*ico 13
谢谢!这里它被封装在一个功能(更新在17年5月30日与需要外):
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();
}
Run Code Online (Sandbox Code Playgroud)
它非常快(我大约50毫秒,但它将取决于您的连接和服务器速度).请注意,它也非常基本,即它不能很好地处理重定向...
似乎很多人都推荐使用一个库,但url-exist包含数据获取库的依赖项,因此这里是使用所有本机节点模块的它的克隆:
const http = require('http');
const { parse, URL } = require('url');
// https://github.com/sindresorhus/is-url-superb/blob/main/index.js
function isUrl(str) {
if (typeof str !== 'string') {
return false;
}
const trimmedStr = str.trim();
if (trimmedStr.includes(' ')) {
return false;
}
try {
new URL(str); // eslint-disable-line no-new
return true;
} catch {
return false;
}
}
// https://github.com/Richienb/url-exist/blob/master/index.js
function urlExists(url) {
return new Promise((resolve) => {
if (!isUrl(url)) {
resolve(false);
}
const options = {
method: 'HEAD',
host: parse(url).host,
path: parse(url).pathname,
port: 80,
};
const req = http.request(options, (res) => {
resolve(res.statusCode < 400 || res.statusCode >= 500);
});
req.end();
});
}
urlExists(
'https://stackoverflow.com/questions/26007187/node-js-check-if-a-remote-url-exists'
).then(console.log);
Run Code Online (Sandbox Code Playgroud)
这也可能会吸引那些不想为了非常简单的目的而安装依赖项的人。
只需使用url-exists npm包来测试url是否存在
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
});
Run Code Online (Sandbox Code Playgroud)
小智 6
require在 Node.js 中进入函数是错误的。遵循的 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();
}
Run Code Online (Sandbox Code Playgroud)
看看url-exists npm 包https://www.npmjs.com/package/url-exists
配置:
$ npm install url-exists
Run Code Online (Sandbox Code Playgroud)
用途:
const 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
});
Run Code Online (Sandbox Code Playgroud)
您还可以承诺它以利用await和async:
const util = require('util');
const urlExists = util.promisify(require('url-exists'));
let isExists = await urlExists('https://www.google.com'); // true
isExists = await urlExists('https://www.fakeurl.notreal'); // false
Run Code Online (Sandbox Code Playgroud)
快乐编码!
| 归档时间: |
|
| 查看次数: |
28451 次 |
| 最近记录: |