繁体   English   中英

我想在 javascript NODE.js 中以同步方式检查 URL 是否存在

[英]I want to check whether URL exists or not in Synchronous way in javascript NODE.js


伙计们,我是节点 js 的新手

谢谢你们🙌🙏。

const urlExist = require("url-exist");

 var httpUrl='';
 for (var i=0; i<req.body.url.length; i++) {
        httpUrl = req.body.url[i];
        let exists1 = () => Promise.resolve(urlExist(httpUrl),httpUrl);

        Promise.all([exists1()]).then((resultArr)=>{
              console.log(resultArr[0],httpUrl)
        })
}

输入作为来自 POSTMAN 的数组给出

{
    "urls":["http://www.wrong.com/","http://wrong.com/","http://example.com","http://example.com","http:/example.com","http:/example5.com"]

}

这是我得到的输出

true  http:/example5.com
false http:/example5.com
true  http://example5.com
true  http://example5.com
true  http://example5.com
false http://example5.com

预期的输出是:-

false http://www.wrong.com/
false http://wrong.com/
true  http:/example.com
true  http:/example.com
true  http:/example.com
true  http:/example5.com

但问题是这个函数只读取“HTTP:/example5.com”并且没有给出相同的布尔值

谢谢你们

您不需要将它包装在 promise 中,然后在循环内使用一个 promise。 简单地这样做应该有效

const urlExist = require("url-exist");

const urls = ["http://www.wrong.com/","http://wrong.com/","http://example.com","http://example.com","http:/example.com","http:/example5.com"];

Promise.all(urls.map(async url => {
  const result = await urlExist(url);
  return {"status": result, url};
}))
  .then(res => console.log(res));

您可以按照自己的方式修改输出。 目前它正在将其记录为一个数组

另外,请注意,这里使用Promise.all对同一 url 执行多个查询是同时完成的,因此可能会产生奇怪的结果(例如,当从同一 IP 发送太多请求时,服务器可能会拒绝)。

如果你想避免它,你可以使用for ... of循环,它将依次执行每个请求,例如:

const exists = require('url-exist')

const urls = [
  'http://www.wrong.com/',
  'http://wrong.com/',
  'http://example.com',
  'http://example.com',
  'http:/example.com',
  'http:/example5.com'
]

const run = async () => {
  const results = []
  for (const url of urls) {
    try {
      const result = await exists(url)
      results.push({ result, url })
    } catch (e) { console.error(`error with ${url} : ${e}`) }
  }
  return results
}

run()
.then(console.log)
.catch(console.error)

希望这可以帮助! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM