1
resposta

NÃO CONSIGO UNIFICAR OS ARRAYS DE STATUSCODE E LINKS

const fetch = require('node-fetch')

function errHandling (err){
    throw new Error (err.message);
}


async function statusCheck (arrUrls){
    try {
        const statusArr = await Promise
        .all(arrUrls
            .map(arrUrl => Promise
                .all(arrUrl
                    .map((async url => {
                    const res = await fetch(url);
                    return `${res.status} - ${res.statusText}`
        })))));
        return statusArr; 
    }catch(err){
        errHandling(err);
    }

}

function urlArrGenerator (arrLinks){

    return arrLinks
    .map(link => link
        .map(linkObj=> Object
            .values(linkObj).join()));
}

async function validateUrl (arrLinks){
   const links = urlArrGenerator(arrLinks);
   const statusLinks = await statusCheck(links);

   const results = arrLinks.map(arr => arr.map((obj, i) => ({
    ...obj,
    status : statusLinks[i]
   })));
   return results
}



module.exports = validateUrl;

ELE ME RETORNA COMO UNDEFINED EM ALGUNS STATUS CODE SEGUE NO PRINT

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Lucas! Tudo bem?

Peço desculpa pela demora em respondê-lo.

Uma possível causa para isso é que alguns dos links que você está tentando acessar podem não estar retornando uma resposta válida. Isso pode acontecer, por exemplo, se o servidor estiver inacessível ou se o link estiver quebrado.

Para resolver esse problema, você pode adicionar uma verificação para garantir que apenas os links válidos sejam processados. Você pode fazer isso filtrando os links antes de realizar a requisição usando o fetch. Por exemplo:

async function statusCheck(arrUrls) {
  try {
    const statusArr = await Promise.all(
      arrUrls.map(async (arrUrl) => {
        const validUrls = arrUrl.filter((url) => url.startsWith("http")); // Filtra apenas os links válidos que começam com "http"
        const responses = await Promise.all(
          validUrls.map(async (url) => {
            const res = await fetch(url);
            return `${res.status} - ${res.statusText}`;
          })
        );
        return responses;
      })
    );
    return statusArr;
  } catch (err) {
    errHandling(err);
  }
}

Dessa forma, apenas os links que começam com "http" serão processados, evitando assim que links inválidos retornem undefined no status code.

Espero que essa sugestão possa te ajudar a resolver o problema! Se tiver mais alguma dúvida, estarei à disposição.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.